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