#include<bits/stdc++.h>
using namespace std;
#define MAX 1000009
#define DR if(0)
#define DRU DR printf
#define LL long long
list<int> sas[MAX];
int odw[MAX];
int st[MAX];
bool us[MAX];
typedef struct
{
int ind,st;
}str;
int odp[MAX];
list<int> kol;
bool wrz[MAX];
int dfs(int ob, int ind)
{
DRU("ob=%d\n" ,ob);
list<int>::iterator it;
int wyn=1;
odw[ob]=ind;
for(it=sas[ob].begin();it!=sas[ob].end();it++)
{
if(us[*it]==false&&odw[*it]==0)
wyn+=dfs(*it,ind);
}
return wyn;
}
int main()
{
list<int>::iterator it;
int i,j,n,a,b,d,m,mak=0,poc=0,kon=0,ob,mak_ind=0,il=0;
scanf("%d%d%d" ,&n,&m,&d);
for(i=0;i<m;i++)
{
scanf("%d%d" ,&a,&b);
//printf("a=%d b=%s\n" ,a,b);
sas[a].push_back(b);
sas[b].push_back(a);
st[a]++;
st[b]++;
}
for(i=1;i<=n;i++)
{
//printf("i %d szie %d\n" ,i, sas[i].size());
st[i]=sas[i].size();
if(st[i]<d)
{
us[i]=1;
kol.push_back(i);
}
}
while(kol.size())
{
//printf("size=%d\n" ,kol.size());
ob=kol.front();
kol.pop_front();
for(it=sas[ob].begin();it!=sas[ob].end();it++)
{
if(us[*it]==0)
{
st[*it]--;
if(st[*it]<d)//&&st[*it]>0)
{
us[*it]=1;
kol.push_back(*it);
}
}
}
}
//printf("*");
int zwrot;
for(i=1;i<=n;i++)
if(odw[i]==0&&us[i]==0)
{
// DRU("i=%d dfs\n\n" ,i);
zwrot=dfs(i,i);
if(zwrot>mak)
{
mak=zwrot;
mak_ind=i;
}
}
for(i=1;i<=n;i++)
{
if(odw[i]==mak_ind)
{
odp[il]=i;
il++;
}
}
sort(odp,odp+il);
if(mak==0)
{
printf("NIE\n");
return 0;
}
printf("%d\n" ,mak);
for(i=0;i<il;i++)
printf("%d " ,odp[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 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 | #include<bits/stdc++.h> using namespace std; #define MAX 1000009 #define DR if(0) #define DRU DR printf #define LL long long list<int> sas[MAX]; int odw[MAX]; int st[MAX]; bool us[MAX]; typedef struct { int ind,st; }str; int odp[MAX]; list<int> kol; bool wrz[MAX]; int dfs(int ob, int ind) { DRU("ob=%d\n" ,ob); list<int>::iterator it; int wyn=1; odw[ob]=ind; for(it=sas[ob].begin();it!=sas[ob].end();it++) { if(us[*it]==false&&odw[*it]==0) wyn+=dfs(*it,ind); } return wyn; } int main() { list<int>::iterator it; int i,j,n,a,b,d,m,mak=0,poc=0,kon=0,ob,mak_ind=0,il=0; scanf("%d%d%d" ,&n,&m,&d); for(i=0;i<m;i++) { scanf("%d%d" ,&a,&b); //printf("a=%d b=%s\n" ,a,b); sas[a].push_back(b); sas[b].push_back(a); st[a]++; st[b]++; } for(i=1;i<=n;i++) { //printf("i %d szie %d\n" ,i, sas[i].size()); st[i]=sas[i].size(); if(st[i]<d) { us[i]=1; kol.push_back(i); } } while(kol.size()) { //printf("size=%d\n" ,kol.size()); ob=kol.front(); kol.pop_front(); for(it=sas[ob].begin();it!=sas[ob].end();it++) { if(us[*it]==0) { st[*it]--; if(st[*it]<d)//&&st[*it]>0) { us[*it]=1; kol.push_back(*it); } } } } //printf("*"); int zwrot; for(i=1;i<=n;i++) if(odw[i]==0&&us[i]==0) { // DRU("i=%d dfs\n\n" ,i); zwrot=dfs(i,i); if(zwrot>mak) { mak=zwrot; mak_ind=i; } } for(i=1;i<=n;i++) { if(odw[i]==mak_ind) { odp[il]=i; il++; } } sort(odp,odp+il); if(mak==0) { printf("NIE\n"); return 0; } printf("%d\n" ,mak); for(i=0;i<il;i++) printf("%d " ,odp[i]); } |
English