#include <cstdio> #include <vector> #include <set> #include <algorithm> using namespace std; set <int> kr[200005]; set < pair <int,int> > s; int n,m,d; bool odw[200005]; vector <int> best, best2; void dfs(int start){ odw[start] = true; best2.push_back(start); for (set <int>::iterator i = kr[start].begin(); i != kr[start].end(); i++){ if (!odw[*i]){ dfs(*i); } } } int main(){ scanf("%d%d%d",&n,&m,&d); for (int i = 0; i < m; i++){ int a,b; scanf("%d%d",&a,&b); kr[a].insert(b); kr[b].insert(a); } for (int i = 1; i <= n; i++){ s.insert(make_pair(kr[i].size(), i)); } while (!s.empty()){ pair <int,int> f = *s.begin(); s.erase(s.begin()); if (f.first >= d){ s.clear(); } else { for (set <int>::iterator j = kr[f.second].begin(); j != kr[f.second].end(); j++){ int to = *j; s.erase(make_pair(kr[to].size(), to)); kr[to].erase(f.second); s.insert(make_pair(kr[to].size(), to)); } kr[f.second].clear(); } } for (int i = 1; i <= n; i++){ if ((!odw[i]) && (kr[i].size() >= d)){ dfs(i); if (best2.size() > best.size()){ best.clear(); for (int j = 0; j < best2.size(); j++){ best.push_back(best2[j]); } } best2.clear(); } } if (best.size() == 0){ printf("NIE\n"); } else { printf("%d\n", best.size()); sort(best.begin(), best.end()); for (int i = 0; i < best.size(); i++){ printf("%d ", best[i]); } } }
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 | #include <cstdio> #include <vector> #include <set> #include <algorithm> using namespace std; set <int> kr[200005]; set < pair <int,int> > s; int n,m,d; bool odw[200005]; vector <int> best, best2; void dfs(int start){ odw[start] = true; best2.push_back(start); for (set <int>::iterator i = kr[start].begin(); i != kr[start].end(); i++){ if (!odw[*i]){ dfs(*i); } } } int main(){ scanf("%d%d%d",&n,&m,&d); for (int i = 0; i < m; i++){ int a,b; scanf("%d%d",&a,&b); kr[a].insert(b); kr[b].insert(a); } for (int i = 1; i <= n; i++){ s.insert(make_pair(kr[i].size(), i)); } while (!s.empty()){ pair <int,int> f = *s.begin(); s.erase(s.begin()); if (f.first >= d){ s.clear(); } else { for (set <int>::iterator j = kr[f.second].begin(); j != kr[f.second].end(); j++){ int to = *j; s.erase(make_pair(kr[to].size(), to)); kr[to].erase(f.second); s.insert(make_pair(kr[to].size(), to)); } kr[f.second].clear(); } } for (int i = 1; i <= n; i++){ if ((!odw[i]) && (kr[i].size() >= d)){ dfs(i); if (best2.size() > best.size()){ best.clear(); for (int j = 0; j < best2.size(); j++){ best.push_back(best2[j]); } } best2.clear(); } } if (best.size() == 0){ printf("NIE\n"); } else { printf("%d\n", best.size()); sort(best.begin(), best.end()); for (int i = 0; i < best.size(); i++){ printf("%d ", best[i]); } } } |