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