#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; } |