#include <bits/stdc++.h> using namespace std; int n,m,d,a,b,ile[200001],wynik,maxwynik,ilejuzmam,ktorei; vector <int> tab[200001]; vector <int> wystarczajace; bitset <200001> zajete; bitset <200001> odwiedzone; vector <int> wynikerro[200001]; void dfs(int v) { wynikerro[ilejuzmam].push_back(v); odwiedzone[v]=1; wynik++; for(int i=0;i<tab[v].size();i++) { if(zajete[tab[v][i]]==1&&odwiedzone[tab[v][i]]==0) { dfs(tab[v][i]); } } } int main() { scanf("%d%d%d",&n,&m,&d); for(int i=0;i<m;i++) { scanf("%d%d",&a,&b); tab[a].push_back(b); tab[b].push_back(a); ile[a]++; ile[b]++; if(ile[a]>=d&&zajete[a]==0) { wystarczajace.push_back(a); zajete[a]=1; } if(ile[b]>=d&&zajete[b]==0) { wystarczajace.push_back(b); zajete[b]=1; } } for(int i=0;i<wystarczajace.size();i++) { if(odwiedzone[wystarczajace[i]]==0) { dfs(wystarczajace[i]); if(wynik>maxwynik) { maxwynik=wynik; ktorei=ilejuzmam; ilejuzmam++; } } wynik=0; } if(maxwynik>1) { printf("%d\n",maxwynik); sort(wynikerro[ktorei].begin(),wynikerro[ktorei].end()); for(int i=0;i<wynikerro[ktorei].size();i++) { printf("%d ",wynikerro[ktorei][i]); } } else { printf("NIE"); } }
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 | #include <bits/stdc++.h> using namespace std; int n,m,d,a,b,ile[200001],wynik,maxwynik,ilejuzmam,ktorei; vector <int> tab[200001]; vector <int> wystarczajace; bitset <200001> zajete; bitset <200001> odwiedzone; vector <int> wynikerro[200001]; void dfs(int v) { wynikerro[ilejuzmam].push_back(v); odwiedzone[v]=1; wynik++; for(int i=0;i<tab[v].size();i++) { if(zajete[tab[v][i]]==1&&odwiedzone[tab[v][i]]==0) { dfs(tab[v][i]); } } } int main() { scanf("%d%d%d",&n,&m,&d); for(int i=0;i<m;i++) { scanf("%d%d",&a,&b); tab[a].push_back(b); tab[b].push_back(a); ile[a]++; ile[b]++; if(ile[a]>=d&&zajete[a]==0) { wystarczajace.push_back(a); zajete[a]=1; } if(ile[b]>=d&&zajete[b]==0) { wystarczajace.push_back(b); zajete[b]=1; } } for(int i=0;i<wystarczajace.size();i++) { if(odwiedzone[wystarczajace[i]]==0) { dfs(wystarczajace[i]); if(wynik>maxwynik) { maxwynik=wynik; ktorei=ilejuzmam; ilejuzmam++; } } wynik=0; } if(maxwynik>1) { printf("%d\n",maxwynik); sort(wynikerro[ktorei].begin(),wynikerro[ktorei].end()); for(int i=0;i<wynikerro[ktorei].size();i++) { printf("%d ",wynikerro[ktorei][i]); } } else { printf("NIE"); } } |