#include<bits/stdc++.h> #define FOR(i,s,e) for(int i=(s);i<=(e);i++) #define FORD(i,s,e) for(int i=(s);i>=(e);i--) #define ALL(k) (k).begin(),(k).end() #define e1 first #define e2 second #define MP make_pair #define PB push_back #define EB emplace_back using namespace std; typedef long long LL; typedef pair<int,int> PII; typedef pair<LL,LL> PLL; typedef pair<int,PII> PIP; const int MAXN=200111; vector<int> kraw[MAXN]; PII kr[MAXN]; int deg[MAXN]; int usu[MAXN]; int fu[MAXN]; void ustaw(int n){ FOR(i,1,n) fu[i]=-1; } int find(int v){ if(fu[v]<0) return v; fu[v]=find(fu[v]); return fu[v]; } int unia(int a,int b){ int aa=find(a),bb=find(b); if(aa==bb) return 0; if(fu[aa]>fu[bb]) swap(aa,bb); fu[aa]+=fu[bb]; fu[bb]=aa; return 1; } main(){ int n,m;scanf("%d%d",&n,&m); int d;scanf("%d",&d); FOR(i,1,m){ int a,b;scanf("%d%d",&a,&b); kr[i]={a,b}; kraw[a].PB(b); kraw[b].PB(a); deg[a]++,deg[b]++; } int sajz=n; priority_queue<PII> PQ; FOR(i,1,n) PQ.emplace(-deg[i],i); while(!PQ.empty()){ int v=PQ.top().e2; int val=-PQ.top().e1;PQ.pop(); if(usu[v]||val!=deg[v]) continue; if(val>=d) break; sajz--; usu[v]=1; for(auto b:kraw[v]){ if(usu[b]) continue; deg[b]--; PQ.emplace(-deg[b],b); } } if(sajz==0) {puts("NIE");return 0;} ustaw(n); FOR(v,1,n){ if(usu[v]) continue; for(auto b:kraw[v]){ if(usu[b]) continue; unia(v,b); } } int najl=0; FOR(i,1,n){ if(usu[i]) continue; if(fu[i]<fu[najl]) najl=i; } //puts("A"); printf("%d\n",-fu[najl]); FOR(i,1,n) if(i==najl||fu[i]==najl) printf("%d ",i); puts(""); }
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 | #include<bits/stdc++.h> #define FOR(i,s,e) for(int i=(s);i<=(e);i++) #define FORD(i,s,e) for(int i=(s);i>=(e);i--) #define ALL(k) (k).begin(),(k).end() #define e1 first #define e2 second #define MP make_pair #define PB push_back #define EB emplace_back using namespace std; typedef long long LL; typedef pair<int,int> PII; typedef pair<LL,LL> PLL; typedef pair<int,PII> PIP; const int MAXN=200111; vector<int> kraw[MAXN]; PII kr[MAXN]; int deg[MAXN]; int usu[MAXN]; int fu[MAXN]; void ustaw(int n){ FOR(i,1,n) fu[i]=-1; } int find(int v){ if(fu[v]<0) return v; fu[v]=find(fu[v]); return fu[v]; } int unia(int a,int b){ int aa=find(a),bb=find(b); if(aa==bb) return 0; if(fu[aa]>fu[bb]) swap(aa,bb); fu[aa]+=fu[bb]; fu[bb]=aa; return 1; } main(){ int n,m;scanf("%d%d",&n,&m); int d;scanf("%d",&d); FOR(i,1,m){ int a,b;scanf("%d%d",&a,&b); kr[i]={a,b}; kraw[a].PB(b); kraw[b].PB(a); deg[a]++,deg[b]++; } int sajz=n; priority_queue<PII> PQ; FOR(i,1,n) PQ.emplace(-deg[i],i); while(!PQ.empty()){ int v=PQ.top().e2; int val=-PQ.top().e1;PQ.pop(); if(usu[v]||val!=deg[v]) continue; if(val>=d) break; sajz--; usu[v]=1; for(auto b:kraw[v]){ if(usu[b]) continue; deg[b]--; PQ.emplace(-deg[b],b); } } if(sajz==0) {puts("NIE");return 0;} ustaw(n); FOR(v,1,n){ if(usu[v]) continue; for(auto b:kraw[v]){ if(usu[b]) continue; unia(v,b); } } int najl=0; FOR(i,1,n){ if(usu[i]) continue; if(fu[i]<fu[najl]) najl=i; } //puts("A"); printf("%d\n",-fu[najl]); FOR(i,1,n) if(i==najl||fu[i]==najl) printf("%d ",i); puts(""); } |