#include <iostream> #include <vector> #include <queue> #include <algorithm> using namespace std; queue <int> kolejka; struct lel { vector <int> kanty; int droga; int color; int wierz; }; bool cmp(lel i, lel j) { return i.color < j.color; } int tab[2000000]; vector <lel> graf; lel pom; int kolor = 1; int a,b,d; void BFS(int a,int d) { kolejka.push(a); while(!kolejka.empty()) { if(graf[kolejka.front()].kanty.size() < d) { for(int i = 0; i<graf[kolejka.front()].kanty.size(); i++) { for(int j = 0; j<graf[graf[kolejka.front()].kanty[i]].kanty.size(); j++) { if(graf[graf[kolejka.front()].kanty[i]].kanty[j]==kolejka.front()) { graf[graf[kolejka.front()].kanty[i]].kanty.erase(graf[graf[kolejka.front()].kanty[i]].kanty.begin() + j); break; } } kolejka.push(graf[kolejka.front()].kanty[i]); } // graf.erase(graf.begin() + kolejka.front()); graf[kolejka.front()].color = 0; } else { for(int i = 0; i<graf[kolejka.front()].kanty.size(); i++) { if(graf[graf[kolejka.front()].kanty[i]].droga == 0) { graf[graf[kolejka.front()].kanty[i]].droga = 1; graf[graf[kolejka.front()].kanty[i]].color = kolor; kolejka.push(graf[kolejka.front()].kanty[i]); } } } kolejka.pop(); } } void read() { cin >> a >> b >> d; graf.resize(a+1); int e,f; for(int i = 0; i< b; i++) { cin >> e >> f; graf[e].kanty.push_back(f); graf[f].kanty.push_back(e); } for(int i = 0; i<= a; i++) { graf[i].wierz = i; } } void solve() { int max1 = 0; int lider = 0; for(int i = 1; i<=a; i++) { if(graf[i].droga==0) BFS(i,d); kolor++; } for(int i = 1; i<graf.size();i++) { tab[graf[i].color]++; if(tab[graf[i].color]>max1 && graf[i].color!=0) { max1 = tab[graf[i].color]; lider = graf[i].color; } } if(lider==0) cout << "NIE"; else { cout << max1 << endl; for(int i = 1; i<graf.size(); i++) { if(graf[i].color == lider) cout << i << " "; } } } int main() { ios_base::sync_with_stdio(0); read(); /* for(int i=1; i<=a; i++) { cout << i << " "; for(int j = 0; j<graf[i].kanty.size(); j++) cout << graf[i].kanty[j] << " "; cout << endl; }*/ solve(); /*for(int i=1; i<=a; i++) { cout << i << " "; for(int j = 0; j<graf[i].kanty.size(); j++) cout << graf[i].kanty[j] << " "; cout << endl; } for(int i = 1; i<=a; i++) { cout << i << " " << graf[i].color << endl; } // for(int i=1; i<=a; i++) // { // cout << i << " " << graf[i].droga << endl; // } cout << "YOLO";*/ 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 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 | #include <iostream> #include <vector> #include <queue> #include <algorithm> using namespace std; queue <int> kolejka; struct lel { vector <int> kanty; int droga; int color; int wierz; }; bool cmp(lel i, lel j) { return i.color < j.color; } int tab[2000000]; vector <lel> graf; lel pom; int kolor = 1; int a,b,d; void BFS(int a,int d) { kolejka.push(a); while(!kolejka.empty()) { if(graf[kolejka.front()].kanty.size() < d) { for(int i = 0; i<graf[kolejka.front()].kanty.size(); i++) { for(int j = 0; j<graf[graf[kolejka.front()].kanty[i]].kanty.size(); j++) { if(graf[graf[kolejka.front()].kanty[i]].kanty[j]==kolejka.front()) { graf[graf[kolejka.front()].kanty[i]].kanty.erase(graf[graf[kolejka.front()].kanty[i]].kanty.begin() + j); break; } } kolejka.push(graf[kolejka.front()].kanty[i]); } // graf.erase(graf.begin() + kolejka.front()); graf[kolejka.front()].color = 0; } else { for(int i = 0; i<graf[kolejka.front()].kanty.size(); i++) { if(graf[graf[kolejka.front()].kanty[i]].droga == 0) { graf[graf[kolejka.front()].kanty[i]].droga = 1; graf[graf[kolejka.front()].kanty[i]].color = kolor; kolejka.push(graf[kolejka.front()].kanty[i]); } } } kolejka.pop(); } } void read() { cin >> a >> b >> d; graf.resize(a+1); int e,f; for(int i = 0; i< b; i++) { cin >> e >> f; graf[e].kanty.push_back(f); graf[f].kanty.push_back(e); } for(int i = 0; i<= a; i++) { graf[i].wierz = i; } } void solve() { int max1 = 0; int lider = 0; for(int i = 1; i<=a; i++) { if(graf[i].droga==0) BFS(i,d); kolor++; } for(int i = 1; i<graf.size();i++) { tab[graf[i].color]++; if(tab[graf[i].color]>max1 && graf[i].color!=0) { max1 = tab[graf[i].color]; lider = graf[i].color; } } if(lider==0) cout << "NIE"; else { cout << max1 << endl; for(int i = 1; i<graf.size(); i++) { if(graf[i].color == lider) cout << i << " "; } } } int main() { ios_base::sync_with_stdio(0); read(); /* for(int i=1; i<=a; i++) { cout << i << " "; for(int j = 0; j<graf[i].kanty.size(); j++) cout << graf[i].kanty[j] << " "; cout << endl; }*/ solve(); /*for(int i=1; i<=a; i++) { cout << i << " "; for(int j = 0; j<graf[i].kanty.size(); j++) cout << graf[i].kanty[j] << " "; cout << endl; } for(int i = 1; i<=a; i++) { cout << i << " " << graf[i].color << endl; } // for(int i=1; i<=a; i++) // { // cout << i << " " << graf[i].droga << endl; // } cout << "YOLO";*/ return 0; } |