#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; } |
English