#include <iostream> #include <vector> #include <algorithm> #include <fstream> using namespace std; vector<vector<int> > graf(200001); vector<bool> zbior(200001, 1); vector<vector<int> > wynik(200001); void DFS(int v, int k){ zbior[v]=0; wynik[k].push_back(v); for(int i=0; i<graf[v].size(); i++){ if(zbior[graf[v][i]]) DFS(graf[v][i], k); } } int main(){ ios_base::sync_with_stdio(0); int n, m, d, a, b; cin>>n>>m>>d; for(int i=0; i<m; i++){ cin>>a>>b; graf[a].push_back(b); graf[b].push_back(a); } vector<int> kolejka; vector<int> ilek(n+1); for(int i=1; i<=n; i++){ ilek[i]=graf[i].size(); if(ilek[i]<d){ kolejka.push_back(i); zbior[i]=0; } } while(!kolejka.empty()){ int k=kolejka.back(); kolejka.pop_back(); for(int i=0; i<graf[k].size(); i++){ ilek[ graf[k][i] ]--; if(zbior[graf[k][i]] && ilek[graf[k][i]] < d){ kolejka.push_back(graf[k][i]); zbior[graf[k][i]]=0; } } } int wyn=0; for(int i=1; i<=n; i++){ if(zbior[i]) DFS(i, i); if(wynik[i].size() > wynik[wyn].size()) wyn=i; } sort(wynik[wyn].begin(), wynik[wyn].end()); if(wyn==0) cout<<"NIE"; else { cout<<wynik[wyn].size()<<endl; for(int i=0; i<wynik[wyn].size(); i++) cout<<wynik[wyn][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 | #include <iostream> #include <vector> #include <algorithm> #include <fstream> using namespace std; vector<vector<int> > graf(200001); vector<bool> zbior(200001, 1); vector<vector<int> > wynik(200001); void DFS(int v, int k){ zbior[v]=0; wynik[k].push_back(v); for(int i=0; i<graf[v].size(); i++){ if(zbior[graf[v][i]]) DFS(graf[v][i], k); } } int main(){ ios_base::sync_with_stdio(0); int n, m, d, a, b; cin>>n>>m>>d; for(int i=0; i<m; i++){ cin>>a>>b; graf[a].push_back(b); graf[b].push_back(a); } vector<int> kolejka; vector<int> ilek(n+1); for(int i=1; i<=n; i++){ ilek[i]=graf[i].size(); if(ilek[i]<d){ kolejka.push_back(i); zbior[i]=0; } } while(!kolejka.empty()){ int k=kolejka.back(); kolejka.pop_back(); for(int i=0; i<graf[k].size(); i++){ ilek[ graf[k][i] ]--; if(zbior[graf[k][i]] && ilek[graf[k][i]] < d){ kolejka.push_back(graf[k][i]); zbior[graf[k][i]]=0; } } } int wyn=0; for(int i=1; i<=n; i++){ if(zbior[i]) DFS(i, i); if(wynik[i].size() > wynik[wyn].size()) wyn=i; } sort(wynik[wyn].begin(), wynik[wyn].end()); if(wyn==0) cout<<"NIE"; else { cout<<wynik[wyn].size()<<endl; for(int i=0; i<wynik[wyn].size(); i++) cout<<wynik[wyn][i]<<" "; } } |