//Tadrion #include <cstdio> #include <vector> #include <iostream> #include <deque> #include <map> #include <set> #include <string> #include <cstring> #include <cstdlib> #include <cmath> #include <queue> #include <stack> #include <algorithm> #include <utility> using namespace std; #define MAX(a,b) ((a) > (b) ? (a) : (b)) #define MIN(a,b) ((a) < (b) ? (a) : (b)) #define CLEAR(x) (memset(x,0,sizeof(x))) #define SZ(x) ((int)(x).size()) #define ALL(x) (x).begin(),(x).end() #define VAR(v, n) __typeof(n) v = (n) #define FOR(x, b, e) for(int x = b; x <= (e); ++x) #define FORD(x, b, e) for(int x = b; x >= (e); --x) #define REP(x, n) for(int x = 0; x < (n); ++x) #define FOREACH(i, c) for(VAR(i,(c).begin()); i != (c).end(); ++i) #define DBG(v) cout<<#v<<" = "<<v<<endl; #define IN(x,y) ((y).find(x)!=(y).end()) #define ST first #define ND second #define PB push_back #define PF push_front #define MP make_pair typedef long long int LL; typedef pair<int,int> PII; typedef vector<int> VI; int n,m,d; VI v[200010]; int color[200010]; int active[200010]; VI comps[200010]; int deg[200010],a,b; deque<int> q; void bfs(int s, int nr) { deque<int> q; color[s] = nr; q.PB(s); while(!q.empty()) { s = q.front(); q.pop_front(); //printf("%d jest w %d\n",s,nr); REP(i,SZ(v[s])) { if(active[v[s][i]] == 1 && color[v[s][i]] == 0) { color[v[s][i]] = nr; q.PB(v[s][i]); } } } } int main() { scanf("%d %d %d",&n,&m,&d); FOR(i,1,m) { scanf("%d %d",&a,&b); v[a].PB(b); v[b].PB(a); } FOR(i,1,n) { active[i] = 1; deg[i] = SZ(v[i]); if(deg[i] < d) q.PB(i); } while(!q.empty()) { int s = q.front(); q.pop_front(); //printf("za malo dla %d\n",s); active[s] = 0; REP(i,SZ(v[s])) { deg[v[s][i]]--; if(deg[v[s][i]]+1 == d && deg[v[s][i]] < d) q.PB(v[s][i]); } } int curColor = 1; FOR(i,1,n) { if(active[i] == 1 && color[i] == 0) { bfs(i,curColor); curColor++; } } FOR(i,1,n) { if(color[i] != 0) comps[color[i]].PB(i); } curColor--; int maxx = 0; int maxind = 0; FOR(i,1,curColor) { if(SZ(comps[i]) > maxx) { maxx = SZ(comps[i]); maxind = i; } } if(maxind == 0) { printf("NIE\n"); } else { printf("%d\n",maxx); sort(comps[maxind].begin(),comps[maxind].end()); REP(i,SZ(comps[maxind])) { printf("%d ",comps[maxind][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 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 | //Tadrion #include <cstdio> #include <vector> #include <iostream> #include <deque> #include <map> #include <set> #include <string> #include <cstring> #include <cstdlib> #include <cmath> #include <queue> #include <stack> #include <algorithm> #include <utility> using namespace std; #define MAX(a,b) ((a) > (b) ? (a) : (b)) #define MIN(a,b) ((a) < (b) ? (a) : (b)) #define CLEAR(x) (memset(x,0,sizeof(x))) #define SZ(x) ((int)(x).size()) #define ALL(x) (x).begin(),(x).end() #define VAR(v, n) __typeof(n) v = (n) #define FOR(x, b, e) for(int x = b; x <= (e); ++x) #define FORD(x, b, e) for(int x = b; x >= (e); --x) #define REP(x, n) for(int x = 0; x < (n); ++x) #define FOREACH(i, c) for(VAR(i,(c).begin()); i != (c).end(); ++i) #define DBG(v) cout<<#v<<" = "<<v<<endl; #define IN(x,y) ((y).find(x)!=(y).end()) #define ST first #define ND second #define PB push_back #define PF push_front #define MP make_pair typedef long long int LL; typedef pair<int,int> PII; typedef vector<int> VI; int n,m,d; VI v[200010]; int color[200010]; int active[200010]; VI comps[200010]; int deg[200010],a,b; deque<int> q; void bfs(int s, int nr) { deque<int> q; color[s] = nr; q.PB(s); while(!q.empty()) { s = q.front(); q.pop_front(); //printf("%d jest w %d\n",s,nr); REP(i,SZ(v[s])) { if(active[v[s][i]] == 1 && color[v[s][i]] == 0) { color[v[s][i]] = nr; q.PB(v[s][i]); } } } } int main() { scanf("%d %d %d",&n,&m,&d); FOR(i,1,m) { scanf("%d %d",&a,&b); v[a].PB(b); v[b].PB(a); } FOR(i,1,n) { active[i] = 1; deg[i] = SZ(v[i]); if(deg[i] < d) q.PB(i); } while(!q.empty()) { int s = q.front(); q.pop_front(); //printf("za malo dla %d\n",s); active[s] = 0; REP(i,SZ(v[s])) { deg[v[s][i]]--; if(deg[v[s][i]]+1 == d && deg[v[s][i]] < d) q.PB(v[s][i]); } } int curColor = 1; FOR(i,1,n) { if(active[i] == 1 && color[i] == 0) { bfs(i,curColor); curColor++; } } FOR(i,1,n) { if(color[i] != 0) comps[color[i]].PB(i); } curColor--; int maxx = 0; int maxind = 0; FOR(i,1,curColor) { if(SZ(comps[i]) > maxx) { maxx = SZ(comps[i]); maxind = i; } } if(maxind == 0) { printf("NIE\n"); } else { printf("%d\n",maxx); sort(comps[maxind].begin(),comps[maxind].end()); REP(i,SZ(comps[maxind])) { printf("%d ",comps[maxind][i]); } printf("\n"); } return 0; } |