#include <bits/stdc++.h>
using namespace std;
int n, m, d;
vector<unordered_set<int>> G;
unordered_set<int> sentenced;
int main() {
scanf("%d%d%d", &n, &m, &d);
G.resize(n);
for(int i = 0; i < m; ++i) {
int ai, bi;
scanf("%d%d", &ai, &bi);
--ai;
--bi;
G[ai].insert(bi);
G[bi].insert(ai);
}
for(int i = 0; i < n; ++i)
if(G[i].size() < d)
sentenced.insert(i);
while(!sentenced.empty()) {
auto sit = sentenced.begin();
int s = *sit;
sentenced.erase(sit);
for(int i : G[s]) {
G[i].erase(s);
if(G[i].size() < d)
sentenced.insert(i);
}
G[s].clear();
}
vector<vector<int>> anss;
for(int i = 0; i < n; ++i)
if(!G[i].empty()) {
vector<int> st {i};
anss.emplace_back();
while(!st.empty()) {
int j = st.back();
st.pop_back();
if(!G[j].empty()) {
anss.back().push_back(j);
for(int k : G[j])
if(!G[k].empty())
st.push_back(k);
G[j].clear();
}
}
}
if(anss.empty()) {
printf("NIE\n");
return 0;
}
auto ansit = max_element(anss.begin(), anss.end(), [](const vector<int> &va, const vector<int> &vb)
{ return va.size() < vb.size(); });
printf("%d\n", int(ansit->size()));
for(int i : *ansit)
printf("%d ", i+1);
printf("\n");
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 | #include <bits/stdc++.h> using namespace std; int n, m, d; vector<unordered_set<int>> G; unordered_set<int> sentenced; int main() { scanf("%d%d%d", &n, &m, &d); G.resize(n); for(int i = 0; i < m; ++i) { int ai, bi; scanf("%d%d", &ai, &bi); --ai; --bi; G[ai].insert(bi); G[bi].insert(ai); } for(int i = 0; i < n; ++i) if(G[i].size() < d) sentenced.insert(i); while(!sentenced.empty()) { auto sit = sentenced.begin(); int s = *sit; sentenced.erase(sit); for(int i : G[s]) { G[i].erase(s); if(G[i].size() < d) sentenced.insert(i); } G[s].clear(); } vector<vector<int>> anss; for(int i = 0; i < n; ++i) if(!G[i].empty()) { vector<int> st {i}; anss.emplace_back(); while(!st.empty()) { int j = st.back(); st.pop_back(); if(!G[j].empty()) { anss.back().push_back(j); for(int k : G[j]) if(!G[k].empty()) st.push_back(k); G[j].clear(); } } } if(anss.empty()) { printf("NIE\n"); return 0; } auto ansit = max_element(anss.begin(), anss.end(), [](const vector<int> &va, const vector<int> &vb) { return va.size() < vb.size(); }); printf("%d\n", int(ansit->size())); for(int i : *ansit) printf("%d ", i+1); printf("\n"); return 0; } |
English