#include<iostream>
#include<vector>
#include<queue>
#include<algorithm>
using namespace std;
const int MAX_N=200005;
const int MAX_M=200005;
vector <int> V[MAX_N];
vector <int> wynik;
bool odw[MAX_N];
void DFS(int v){
wynik.push_back(v);
odw[v]=true;
for(int i=0; i<V[v].size(); ++i){
if(!odw[V[v][i]])DFS(V[v][i]);
}
}
bool czyZly[MAX_N];
int licznik;
queue <int> Q;
int Vsize[MAX_N];
int n,m,d,a,b;
int maxi,ID;
void Licz(int v){
++licznik;
czyZly[v]=true;
for(int i=0; i<V[v].size(); ++i){
if(!czyZly[V[v][i]])Licz(V[v][i]);
}
}
void BFS(){
while(!Q.empty()){
int v=Q.front();
Q.pop();
for(int i=0; i<V[v].size(); ++i){
int vi=V[v][i];
if(!czyZly[vi]){
--Vsize[vi];
if(Vsize[vi]<d){
czyZly[vi]=true;
odw[vi]=true;
Q.push(vi);
}
}
}
}
}
int main(){
ios_base::sync_with_stdio(0);
cin>>n>>m>>d;
for(int i=0; i<m; ++i){
cin>>a>>b;
V[a].push_back(b);
V[b].push_back(a);
++Vsize[a];
++Vsize[b];
}
for(int i=1; i<=n; ++i){
if(Vsize[i]<d){
Q.push(i);
odw[i]=true;
czyZly[i]=true;
}
}
BFS();
for(int i=1; i<=n; ++i){
if(!czyZly[i]){
licznik=0;
Licz(i);
if(licznik>maxi){
maxi=licznik;
ID=i;
}
}
}
DFS(ID);
if(maxi>0){
cout<<maxi<<endl;
sort(wynik.begin(), wynik.end());
for(int i=0; i<wynik.size(); ++i){
cout<<wynik[i]<<" ";
}
cout<<endl;
}
else cout<<"NIE"<<endl;
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 | #include<iostream> #include<vector> #include<queue> #include<algorithm> using namespace std; const int MAX_N=200005; const int MAX_M=200005; vector <int> V[MAX_N]; vector <int> wynik; bool odw[MAX_N]; void DFS(int v){ wynik.push_back(v); odw[v]=true; for(int i=0; i<V[v].size(); ++i){ if(!odw[V[v][i]])DFS(V[v][i]); } } bool czyZly[MAX_N]; int licznik; queue <int> Q; int Vsize[MAX_N]; int n,m,d,a,b; int maxi,ID; void Licz(int v){ ++licznik; czyZly[v]=true; for(int i=0; i<V[v].size(); ++i){ if(!czyZly[V[v][i]])Licz(V[v][i]); } } void BFS(){ while(!Q.empty()){ int v=Q.front(); Q.pop(); for(int i=0; i<V[v].size(); ++i){ int vi=V[v][i]; if(!czyZly[vi]){ --Vsize[vi]; if(Vsize[vi]<d){ czyZly[vi]=true; odw[vi]=true; Q.push(vi); } } } } } int main(){ ios_base::sync_with_stdio(0); cin>>n>>m>>d; for(int i=0; i<m; ++i){ cin>>a>>b; V[a].push_back(b); V[b].push_back(a); ++Vsize[a]; ++Vsize[b]; } for(int i=1; i<=n; ++i){ if(Vsize[i]<d){ Q.push(i); odw[i]=true; czyZly[i]=true; } } BFS(); for(int i=1; i<=n; ++i){ if(!czyZly[i]){ licznik=0; Licz(i); if(licznik>maxi){ maxi=licznik; ID=i; } } } DFS(ID); if(maxi>0){ cout<<maxi<<endl; sort(wynik.begin(), wynik.end()); for(int i=0; i<wynik.size(); ++i){ cout<<wynik[i]<<" "; } cout<<endl; } else cout<<"NIE"<<endl; return 0; } |
English