fork download
  1. #include <iostream>
  2. #include <vector>
  3. #include <cstring>
  4. using namespace std;
  5.  
  6. const int MAX = 105;
  7. vector<int> adj[MAX];
  8. bool visited[MAX];
  9. int n;
  10.  
  11. void readInput() {
  12. cin >> n;
  13. for (int i = 1; i <= n; i++) {
  14. int k;
  15. cin >> k;
  16. for (int j = 0; j < k; j++) {
  17. int v;
  18. cin >> v;
  19. adj[i].push_back(v);
  20. }
  21. }
  22. }
  23.  
  24. void dfs(int u) {
  25. visited[u] = true;
  26. for (int v : adj[u]) {
  27. if (!visited[v]) {
  28. dfs(v);
  29. }
  30. }
  31. }
  32.  
  33. int dem_so_tplt(int ignore = -1) {
  34. memset(visited, false, sizeof(visited));
  35. int count = 0;
  36. for (int i = 1; i <= n; i++) {
  37. if (i == ignore) continue;
  38. if (!visited[i]) {
  39. count++;
  40. dfs(i);
  41. }
  42. }
  43. return count;
  44. }
  45.  
  46. void tim_dinh_tru() {
  47. vector<int> dt;
  48. int so_tplt_ban_dau = dem_so_tplt();
  49. for (int u = 1; u <= n; u++) {
  50. int tplt_moi = dem_so_tplt(u);
  51. if (tplt_moi > so_tplt_ban_dau) {
  52. dt.push_back(u);
  53. }
  54. }
  55. cout << dt.size() << endl;
  56. for (int i : dt) cout << i << " ";
  57. cout << endl;
  58. }
  59.  
  60. int main() {
  61. readInput();
  62. tim_dinh_tru();
  63. return 0;
  64. }
Success #stdin #stdout 0.01s 5288KB
stdin
5
2 2 3
2 1 3
3 1 2 4
2 3 5
1 4
stdout
0