#include <iostream> #include <algorithm> #include <vector> #include <math.h> using namespace std; typedef struct{ bool odw; vector<int>pol; int poczatek; }wierzch; wierzch miasta[200001]; int n,m,d, zlicz[200001]; void usun(int x){ if(miasta[x].pol.size()<d){ int pomoc=miasta[x].pol.size()-1; vector <int> usuwanie; for(int j=pomoc; j>=0; j--){ if(miasta[miasta[x].pol[j]].pol.size()==1){ miasta[miasta[x].pol[j]].pol.pop_back(); } else{ for(int k=0; k<miasta[miasta[x].pol[j]].pol.size(); k++){ if(miasta[miasta[x].pol[j]].pol[k]==x){ miasta[miasta[x].pol[j]].pol[k]=miasta[miasta[x].pol[j]].pol[miasta[miasta[x].pol[j]].pol.size()-1]; miasta[miasta[x].pol[j]].pol.pop_back(); } } } usuwanie.push_back(miasta[x].pol[j]); miasta[x].pol.pop_back(); } for(int j=pomoc; j>=0; j--){ usun(usuwanie[j]); } } } void idz(int x, int startowy){ for (int i=0; i<miasta[x].pol.size(); i++){ if(miasta[miasta[x].pol[i]].odw==false){ zlicz[startowy]++; miasta[miasta[x].pol[i]].poczatek=startowy; miasta[miasta[x].pol[i]].odw=true; idz(miasta[x].pol[i], startowy); } } } int main(){ ios_base::sync_with_stdio(0); int a,b; cin>>n>>m>>d; for(int i=0; i<m; i++){ cin>>a>>b; miasta[a].pol.push_back(b); miasta[b].pol.push_back(a); } for(int i=0; i<n; i++){ usun(i+1); } for(int i=0; i<n; i++){ if(miasta[i+1].odw==false){ miasta[i+1].odw=true; miasta[i+1].poczatek=i+1; zlicz[i+1]++; idz(i+1, i+1); } } int maxi=zlicz[1]; int ktory=1; for(int i=0; i<n; i++){ if(zlicz[i+1]>maxi){ maxi=zlicz[i+1]; ktory=i+1; } } if(maxi<=1){ cout<<"NIE"; } else{ cout<<maxi<<"\n"; for(int i=0; i<n; i++){ if(miasta[i+1].poczatek==ktory){ cout<<i+1<<" "; } } } return 0; }
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 | #include <iostream> #include <algorithm> #include <vector> #include <math.h> using namespace std; typedef struct{ bool odw; vector<int>pol; int poczatek; }wierzch; wierzch miasta[200001]; int n,m,d, zlicz[200001]; void usun(int x){ if(miasta[x].pol.size()<d){ int pomoc=miasta[x].pol.size()-1; vector <int> usuwanie; for(int j=pomoc; j>=0; j--){ if(miasta[miasta[x].pol[j]].pol.size()==1){ miasta[miasta[x].pol[j]].pol.pop_back(); } else{ for(int k=0; k<miasta[miasta[x].pol[j]].pol.size(); k++){ if(miasta[miasta[x].pol[j]].pol[k]==x){ miasta[miasta[x].pol[j]].pol[k]=miasta[miasta[x].pol[j]].pol[miasta[miasta[x].pol[j]].pol.size()-1]; miasta[miasta[x].pol[j]].pol.pop_back(); } } } usuwanie.push_back(miasta[x].pol[j]); miasta[x].pol.pop_back(); } for(int j=pomoc; j>=0; j--){ usun(usuwanie[j]); } } } void idz(int x, int startowy){ for (int i=0; i<miasta[x].pol.size(); i++){ if(miasta[miasta[x].pol[i]].odw==false){ zlicz[startowy]++; miasta[miasta[x].pol[i]].poczatek=startowy; miasta[miasta[x].pol[i]].odw=true; idz(miasta[x].pol[i], startowy); } } } int main(){ ios_base::sync_with_stdio(0); int a,b; cin>>n>>m>>d; for(int i=0; i<m; i++){ cin>>a>>b; miasta[a].pol.push_back(b); miasta[b].pol.push_back(a); } for(int i=0; i<n; i++){ usun(i+1); } for(int i=0; i<n; i++){ if(miasta[i+1].odw==false){ miasta[i+1].odw=true; miasta[i+1].poczatek=i+1; zlicz[i+1]++; idz(i+1, i+1); } } int maxi=zlicz[1]; int ktory=1; for(int i=0; i<n; i++){ if(zlicz[i+1]>maxi){ maxi=zlicz[i+1]; ktory=i+1; } } if(maxi<=1){ cout<<"NIE"; } else{ cout<<maxi<<"\n"; for(int i=0; i<n; i++){ if(miasta[i+1].poczatek==ktory){ cout<<i+1<<" "; } } } return 0; } |