#include<bits/stdc++.h>
using namespace std;
const int mx = 200005;
int s[mx], gru[mx], k[mx];
vector<int>G[mx];
int g;
bool vis[mx], ba[mx];
void dfs ( int v ) {
vis[v] = true;
k[v] = g;
gru[g]++;
for ( int i = 0; i < G[v].size(); i++ ) {
int u = G[v][i];
if ( !vis[u] && !ba[u] )
dfs(u);
}
}
int main () {
int n, m, d;
scanf("%d%d%d",&n,&m,&d);
for ( int i = 0; i < m; i++ ) {
int a, b;
scanf("%d%d",&a,&b);
G[a].push_back(b);
G[b].push_back(a);
s[a]++;
s[b]++;
}
queue<int>p;
for ( int i = 1; i <= n; i++ )
if ( s[i] < d )
p.push(i);
while ( !p.empty() ) {
int a;
a = p.front();
p.pop();
ba[a] = true;
for ( int i = 0; i < G[a].size(); i++ ) {
int u = G[a][i];
s[u]--;
if ( s[u] < d && !ba[u] )
p.push(u);
}
}
int w = 0;
g = 0;
for ( int i = 1; i <= n; i++ )
if ( !ba[i] && !vis[i] ) {
g++;
dfs(i);
}
int l = 0;
for ( int i = 1; i <= n; i++ ) {
if ( gru[i] > l ) {
l = gru[i];
w = i;
}
}
if ( w == 0 )
puts("NIE");
else {
printf("%d\n",gru[w]);
for ( int i = 1; i <= n; i++ ) {
if ( k[i] == w )
printf("%d ",i);
}
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | #include<bits/stdc++.h> using namespace std; const int mx = 200005; int s[mx], gru[mx], k[mx]; vector<int>G[mx]; int g; bool vis[mx], ba[mx]; void dfs ( int v ) { vis[v] = true; k[v] = g; gru[g]++; for ( int i = 0; i < G[v].size(); i++ ) { int u = G[v][i]; if ( !vis[u] && !ba[u] ) dfs(u); } } int main () { int n, m, d; scanf("%d%d%d",&n,&m,&d); for ( int i = 0; i < m; i++ ) { int a, b; scanf("%d%d",&a,&b); G[a].push_back(b); G[b].push_back(a); s[a]++; s[b]++; } queue<int>p; for ( int i = 1; i <= n; i++ ) if ( s[i] < d ) p.push(i); while ( !p.empty() ) { int a; a = p.front(); p.pop(); ba[a] = true; for ( int i = 0; i < G[a].size(); i++ ) { int u = G[a][i]; s[u]--; if ( s[u] < d && !ba[u] ) p.push(u); } } int w = 0; g = 0; for ( int i = 1; i <= n; i++ ) if ( !ba[i] && !vis[i] ) { g++; dfs(i); } int l = 0; for ( int i = 1; i <= n; i++ ) { if ( gru[i] > l ) { l = gru[i]; w = i; } } if ( w == 0 ) puts("NIE"); else { printf("%d\n",gru[w]); for ( int i = 1; i <= n; i++ ) { if ( k[i] == w ) printf("%d ",i); } } } |
English