#include <iostream> #include <vector> #include <queue> using namespace std; const int MAXN = 200*1000 + 9; vector<int> g[MAXN]; int kolor[MAXN]; int KOLOR = 1; int dfs(int x){ if(kolor[x]) return 0; kolor[x] = KOLOR; int s = 1; for(int i = 0; i < g[x].size(); ++i) s += dfs(g[x][i]); return s; } int main(){ ios_base::sync_with_stdio(0); int n, m, d; cin >> n >> m >> d; for(int i = 0; i < m; ++i){ int a, b; cin >> a >> b; a--; b--; g[a].push_back(b); g[b].push_back(a); } queue<int> q; vector<int> st(n); for(int x = 0; x < n; ++x){ st[x] = g[x].size(); if(st[x] < d) q.push(x); } while(!q.empty()){ int x = q.front(); q.pop(); for(int i = 0; i < g[x].size(); ++i){ int y = g[x][i]; if(st[y] == d) q.push(y); st[y]--; } } for(int x = 0; x < n; ++x){ if(st[x] < d) g[x].clear(); for(int i = 0; i < g[x].size();){ int y = g[x][i]; if(st[y] < d){ swap(g[x][i], g[x].back()); g[x].pop_back(); } else i++; } } int najile = 0, najkolor = 0; for(int x = 0; x < n; ++x){ KOLOR = x+5; int ile = dfs(x); if(ile > najile){ najile = ile; najkolor = KOLOR; } } if(najile > d){ cout << najile << "\n"; for(int x = 0; x < n; ++x) if(kolor[x] == najkolor) cout << x+1 << " "; } else cout << "NIE\n"; }
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 | #include <iostream> #include <vector> #include <queue> using namespace std; const int MAXN = 200*1000 + 9; vector<int> g[MAXN]; int kolor[MAXN]; int KOLOR = 1; int dfs(int x){ if(kolor[x]) return 0; kolor[x] = KOLOR; int s = 1; for(int i = 0; i < g[x].size(); ++i) s += dfs(g[x][i]); return s; } int main(){ ios_base::sync_with_stdio(0); int n, m, d; cin >> n >> m >> d; for(int i = 0; i < m; ++i){ int a, b; cin >> a >> b; a--; b--; g[a].push_back(b); g[b].push_back(a); } queue<int> q; vector<int> st(n); for(int x = 0; x < n; ++x){ st[x] = g[x].size(); if(st[x] < d) q.push(x); } while(!q.empty()){ int x = q.front(); q.pop(); for(int i = 0; i < g[x].size(); ++i){ int y = g[x][i]; if(st[y] == d) q.push(y); st[y]--; } } for(int x = 0; x < n; ++x){ if(st[x] < d) g[x].clear(); for(int i = 0; i < g[x].size();){ int y = g[x][i]; if(st[y] < d){ swap(g[x][i], g[x].back()); g[x].pop_back(); } else i++; } } int najile = 0, najkolor = 0; for(int x = 0; x < n; ++x){ KOLOR = x+5; int ile = dfs(x); if(ile > najile){ najile = ile; najkolor = KOLOR; } } if(najile > d){ cout << najile << "\n"; for(int x = 0; x < n; ++x) if(kolor[x] == najkolor) cout << x+1 << " "; } else cout << "NIE\n"; } |