#include <cstdio>
#include <vector>
#include <set>
#include <algorithm>
using namespace std;
const int N = 3*1e5;
set < pair <int,int> > S;
set < pair <int,int> >::iterator it;
vector <int> Graf[N];
int Zle[N];
int St[N];
int Odw[N];
int ile,nr;
void Wczytaj(int n,int m){
int i,v,u;
for(i=0; i<m; i++){
scanf("%d%d", &v,&u);
Graf[v].push_back(u);
Graf[u].push_back(v);
St[v]++;
St[u]++;
}
}
void StworzZbiorS(int n,int d){
int i;
int v,u;
for(i=1; i<=n; i++){
S.insert(make_pair(St[i],i));
}
while(S.size() > 0 && (*S.begin()).first < d){
v = (*S.begin()).second;
Zle[v] = 1;
S.erase(S.begin());
for(i=0; i<Graf[v].size(); i++){
u = Graf[v][i];
if(Zle[u] == 0){
it = S.find(make_pair(St[u],u));
S.erase(it);
St[u]--;
S.insert( make_pair(St[u],u) );
}
}
}
//printf("%d\n", S.size());
}
void DFS(int v){
int i;
Odw[v] = nr;
ile++;
for(i=0; i<Graf[v].size(); i++){
if(!Zle[Graf[v][i]] && !Odw[Graf[v][i]]) DFS(Graf[v][i]);
}
}
int main(){
int n,m,d;
int i,najw_spojna,kolor;
scanf("%d%d%d", &n,&m,&d);
Wczytaj(n,m);
StworzZbiorS(n,d);
najw_spojna = -1;
nr = 1;
if(S.size() == 0) printf("NIE\n");
else{
for(i=1; i<=n; i++){
if(!Zle[i] && !Odw[i]){
ile = 0;
DFS(i);
if(ile > najw_spojna){
najw_spojna = ile;
kolor = nr;
}
nr++;
}
}
printf("%d\n", najw_spojna);
for(i=1; i<=n; i++){
if(Odw[i] == kolor) printf("%d ", i);
}
printf("\n");
}
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 | #include <cstdio> #include <vector> #include <set> #include <algorithm> using namespace std; const int N = 3*1e5; set < pair <int,int> > S; set < pair <int,int> >::iterator it; vector <int> Graf[N]; int Zle[N]; int St[N]; int Odw[N]; int ile,nr; void Wczytaj(int n,int m){ int i,v,u; for(i=0; i<m; i++){ scanf("%d%d", &v,&u); Graf[v].push_back(u); Graf[u].push_back(v); St[v]++; St[u]++; } } void StworzZbiorS(int n,int d){ int i; int v,u; for(i=1; i<=n; i++){ S.insert(make_pair(St[i],i)); } while(S.size() > 0 && (*S.begin()).first < d){ v = (*S.begin()).second; Zle[v] = 1; S.erase(S.begin()); for(i=0; i<Graf[v].size(); i++){ u = Graf[v][i]; if(Zle[u] == 0){ it = S.find(make_pair(St[u],u)); S.erase(it); St[u]--; S.insert( make_pair(St[u],u) ); } } } //printf("%d\n", S.size()); } void DFS(int v){ int i; Odw[v] = nr; ile++; for(i=0; i<Graf[v].size(); i++){ if(!Zle[Graf[v][i]] && !Odw[Graf[v][i]]) DFS(Graf[v][i]); } } int main(){ int n,m,d; int i,najw_spojna,kolor; scanf("%d%d%d", &n,&m,&d); Wczytaj(n,m); StworzZbiorS(n,d); najw_spojna = -1; nr = 1; if(S.size() == 0) printf("NIE\n"); else{ for(i=1; i<=n; i++){ if(!Zle[i] && !Odw[i]){ ile = 0; DFS(i); if(ile > najw_spojna){ najw_spojna = ile; kolor = nr; } nr++; } } printf("%d\n", najw_spojna); for(i=1; i<=n; i++){ if(Odw[i] == kolor) printf("%d ", i); } printf("\n"); } return 0; } |
English