#include <cstdio>
#include <vector>
#include <queue>
using namespace std;
#define MAX_N 200000
int n,m,d;
vector<int> V[MAX_N];
int T[MAX_N];
bool erased[MAX_N];
bool visited[MAX_N];
int C[MAX_N];
int A[MAX_N];
int ans=0;
int main(){
scanf("%d%d%d",&n,&m,&d);
for(int a=0;a<m;++a){
int q,w;
scanf("%d%d",&q,&w);
--q;--w;
V[q].push_back(w);
V[w].push_back(q);
}
for(int a=0;a<n;++a)T[a]=V[a].size();
for(int a=0;a<n;++a){
if(!erased[a] && T[a]<d){
queue<int> Q;
Q.push(a);
while(!Q.empty()){
int p=Q.front();
Q.pop();
if(erased[p])continue;
erased[p]=1;
for(int x:V[p]){
--T[x];
if(!erased[x] && T[x]<d){
Q.push(x);
}
}
}
}
}
int color=0;
for(int a=0;a<n;++a)C[a]=-1;
for(int a=0;a<n;++a){
if(!erased[a] && !visited[a]){
queue<int> Q;
Q.push(a);
while(!Q.empty()){
int p=Q.front();
Q.pop();
if(visited[p])continue;
visited[p]=1;
C[p]=color;
++A[color];
if(A[ans]<A[color])ans=color;
for(int x:V[p]){
if(!erased[x] && !visited[x])Q.push(x);
}
}
++color;
}
}
if(A[ans]==0)printf("NIE");
else{
printf("%d\n",A[ans]);
for(int a=0;a<n;++a){
if(C[a]==ans)printf("%d ",a+1);
}
}
return 0;
}
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 76 77 78 79 | #include <cstdio> #include <vector> #include <queue> using namespace std; #define MAX_N 200000 int n,m,d; vector<int> V[MAX_N]; int T[MAX_N]; bool erased[MAX_N]; bool visited[MAX_N]; int C[MAX_N]; int A[MAX_N]; int ans=0; int main(){ scanf("%d%d%d",&n,&m,&d); for(int a=0;a<m;++a){ int q,w; scanf("%d%d",&q,&w); --q;--w; V[q].push_back(w); V[w].push_back(q); } for(int a=0;a<n;++a)T[a]=V[a].size(); for(int a=0;a<n;++a){ if(!erased[a] && T[a]<d){ queue<int> Q; Q.push(a); while(!Q.empty()){ int p=Q.front(); Q.pop(); if(erased[p])continue; erased[p]=1; for(int x:V[p]){ --T[x]; if(!erased[x] && T[x]<d){ Q.push(x); } } } } } int color=0; for(int a=0;a<n;++a)C[a]=-1; for(int a=0;a<n;++a){ if(!erased[a] && !visited[a]){ queue<int> Q; Q.push(a); while(!Q.empty()){ int p=Q.front(); Q.pop(); if(visited[p])continue; visited[p]=1; C[p]=color; ++A[color]; if(A[ans]<A[color])ans=color; for(int x:V[p]){ if(!erased[x] && !visited[x])Q.push(x); } } ++color; } } if(A[ans]==0)printf("NIE"); else{ printf("%d\n",A[ans]); for(int a=0;a<n;++a){ if(C[a]==ans)printf("%d ",a+1); } } return 0; } |
English