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