#include <cstdio> #include <vector> #include <queue> #include <algorithm> using namespace std; int main() { int i, j, n, m, d, a, b; scanf("%d%d%d", &n, &m, &d); vector<vector<int> > graf(n + 1, vector<int>()); vector<int> ile_pozostalo(n + 1, 0); for (i = 0; i < m; ++i) { scanf("%d%d", &a, &b); graf[a].push_back(b); graf[b].push_back(a); } for (i = 1; i <= n; ++i) ile_pozostalo[i] = graf[i].size(); queue<int> q; for (i = 1; i <= n; ++i) if (ile_pozostalo[i] < d) { q.push(i); } while (!q.empty()) { a = q.front(); q.pop(); for (i = 0; i < graf[a].size(); ++i) { if (ile_pozostalo[graf[a][i]] == d) q.push(graf[a][i]); ile_pozostalo[graf[a][i]]--; } } vector<int> odwiedzone(n + 1, false); for (i = 1; i <= n; ++i) if (ile_pozostalo[i] < d) odwiedzone[i] = true; vector<int> najwieksza_spojna; int max_wielkosc_spojnej = 0; for (i = 1; i <= n; ++i) if (!odwiedzone[i]) { q.push(i); odwiedzone[i] = true; vector<int> spojna; while (!q.empty()) { a = q.front(); q.pop(); spojna.push_back(a); for (j = 0; j < graf[a].size(); ++j) if (!odwiedzone[graf[a][j]]) { odwiedzone[graf[a][j]] = true; q.push(graf[a][j]); } } if (spojna.size() > najwieksza_spojna.size()) najwieksza_spojna = spojna; } if (najwieksza_spojna.size() == 0) printf("NIE"); else { printf("%d\n", najwieksza_spojna.size()); sort(najwieksza_spojna.begin(), najwieksza_spojna.end()); for (i = 0; i < najwieksza_spojna.size(); ++i) printf("%d ", najwieksza_spojna[i]); } 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 | #include <cstdio> #include <vector> #include <queue> #include <algorithm> using namespace std; int main() { int i, j, n, m, d, a, b; scanf("%d%d%d", &n, &m, &d); vector<vector<int> > graf(n + 1, vector<int>()); vector<int> ile_pozostalo(n + 1, 0); for (i = 0; i < m; ++i) { scanf("%d%d", &a, &b); graf[a].push_back(b); graf[b].push_back(a); } for (i = 1; i <= n; ++i) ile_pozostalo[i] = graf[i].size(); queue<int> q; for (i = 1; i <= n; ++i) if (ile_pozostalo[i] < d) { q.push(i); } while (!q.empty()) { a = q.front(); q.pop(); for (i = 0; i < graf[a].size(); ++i) { if (ile_pozostalo[graf[a][i]] == d) q.push(graf[a][i]); ile_pozostalo[graf[a][i]]--; } } vector<int> odwiedzone(n + 1, false); for (i = 1; i <= n; ++i) if (ile_pozostalo[i] < d) odwiedzone[i] = true; vector<int> najwieksza_spojna; int max_wielkosc_spojnej = 0; for (i = 1; i <= n; ++i) if (!odwiedzone[i]) { q.push(i); odwiedzone[i] = true; vector<int> spojna; while (!q.empty()) { a = q.front(); q.pop(); spojna.push_back(a); for (j = 0; j < graf[a].size(); ++j) if (!odwiedzone[graf[a][j]]) { odwiedzone[graf[a][j]] = true; q.push(graf[a][j]); } } if (spojna.size() > najwieksza_spojna.size()) najwieksza_spojna = spojna; } if (najwieksza_spojna.size() == 0) printf("NIE"); else { printf("%d\n", najwieksza_spojna.size()); sort(najwieksza_spojna.begin(), najwieksza_spojna.end()); for (i = 0; i < najwieksza_spojna.size(); ++i) printf("%d ", najwieksza_spojna[i]); } return 0; } |