fork download
  1. #include<iostream>
  2. #include<string>
  3. #include<vector>
  4. #include<map>
  5. #include<algorithm>
  6. #include<queue>
  7. using namespace std;
  8.  
  9. vector<int> v;
  10.  
  11. int findset(int nude)
  12. {
  13. return (v[nude] == nude) ? nude : v[nude] = findset(v[nude]);
  14. }
  15.  
  16. void Union(int x, int y)
  17. {
  18. v[findset(x)] = findset(y);
  19. }
  20.  
  21. int main()
  22. {
  23. int n,x;
  24. cin >> n>>x;
  25. v.resize(n);
  26. for (int i = 0; i < n; i++)
  27. v[i] = i;
  28. while (x--)
  29. {
  30. int a, b;
  31. cin >> a >> b;
  32. a--;
  33. b--;
  34. Union(a, b);
  35. }
  36.  
  37. for (int i = 0; i < n; i++)
  38. findset(i);
  39.  
  40. map<int, int> m;
  41. for (int i = 0; i < n; i++)
  42. m[v[i]]++;
  43.  
  44. int maxi = v[0];
  45. for (auto it : m)
  46. {
  47. if (it.second > m[maxi])
  48. maxi = it.first;
  49. }
  50.  
  51. vector<int> maxiis;
  52. for (auto it : m)
  53. {
  54. if (it.second == m[maxi])
  55. maxiis.push_back(it.first);
  56. }
  57.  
  58. sort(maxiis.begin(), maxiis.end());
  59.  
  60. vector<int> ans;
  61. for (int i = 0; i < n; i++)
  62. if (binary_search(maxiis.begin(), maxiis.end(),v[i]))
  63. ans.push_back(i);
  64.  
  65. cout << ans.size() << endl;
  66. for (int i = 0; i < ans.size(); i++)
  67. {
  68. if (i != 0)
  69. cout << ' ';
  70. cout << ans[i]+1;
  71. }
  72. cout << endl;
  73.  
  74.  
  75. return 0;
  76. }
Runtime error #stdin #stdout 0s 4276KB
stdin
Standard input is empty
stdout
Standard output is empty