#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; } |
English