#include<cstdio> #include<vector> #include<queue> using namespace std; const int S = 200003; vector <int> graf[S]; queue <int> kolejka; int in[S]; int N, M, maks, v, D, a, b, ile; bool odw[S], odw2[S], czy[S]; void DFS2(int k) { czy[k]=true; odw[k]=true; for(int i = 0; i < graf[k].size(); ++ i) { if(odw[graf[k][i]]) continue; DFS2(graf[k][i]); } } void DFS(int k) { ile ++; odw2[k]=true; for(int i = 0; i < graf[k].size(); ++ i) { if(odw2[graf[k][i]]) continue; DFS(graf[k][i]); } } int main(int x) { scanf("%d%d%d",&N,&M,&D); for(int i = 0; i < M; ++ i) { scanf("%d%d",&a,&b); graf[a].push_back(b); graf[b].push_back(a); in[a]++; in[b]++; } for(int i = 1; i <= N; ++ i) { if(in[i]<D) { kolejka.push(i); odw2[i]=odw[i]=true; } } while(!kolejka.empty()) { int a = kolejka.front(); kolejka.pop(); for(int i = 0; i < graf[a].size(); ++ i) { if(odw2[graf[a][i]]) continue; in[graf[a][i]]--; if(in[graf[a][i]]<D) { odw2[graf[a][i]]=odw[graf[a][i]]=true; kolejka.push(graf[a][i]); } } } for(int i = 1; i <= N; ++ i) { if(odw2[i]) continue; ile = 0; DFS(i); if(ile>maks) { maks = ile; v = i; } } DFS2(v); if(maks==0) { printf("NIE"); return 0; } printf("%d\n",maks); for(int i = 1; i <= N; ++ i) { if(czy[i]) 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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 | #include<cstdio> #include<vector> #include<queue> using namespace std; const int S = 200003; vector <int> graf[S]; queue <int> kolejka; int in[S]; int N, M, maks, v, D, a, b, ile; bool odw[S], odw2[S], czy[S]; void DFS2(int k) { czy[k]=true; odw[k]=true; for(int i = 0; i < graf[k].size(); ++ i) { if(odw[graf[k][i]]) continue; DFS2(graf[k][i]); } } void DFS(int k) { ile ++; odw2[k]=true; for(int i = 0; i < graf[k].size(); ++ i) { if(odw2[graf[k][i]]) continue; DFS(graf[k][i]); } } int main(int x) { scanf("%d%d%d",&N,&M,&D); for(int i = 0; i < M; ++ i) { scanf("%d%d",&a,&b); graf[a].push_back(b); graf[b].push_back(a); in[a]++; in[b]++; } for(int i = 1; i <= N; ++ i) { if(in[i]<D) { kolejka.push(i); odw2[i]=odw[i]=true; } } while(!kolejka.empty()) { int a = kolejka.front(); kolejka.pop(); for(int i = 0; i < graf[a].size(); ++ i) { if(odw2[graf[a][i]]) continue; in[graf[a][i]]--; if(in[graf[a][i]]<D) { odw2[graf[a][i]]=odw[graf[a][i]]=true; kolejka.push(graf[a][i]); } } } for(int i = 1; i <= N; ++ i) { if(odw2[i]) continue; ile = 0; DFS(i); if(ile>maks) { maks = ile; v = i; } } DFS2(v); if(maks==0) { printf("NIE"); return 0; } printf("%d\n",maks); for(int i = 1; i <= N; ++ i) { if(czy[i]) printf("%d ",i); } } |