Advertisement
Nik_Perepelov

первая из доп контеста

Nov 16th, 2021
785
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.51 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. class DSU {
  7.     int num_of_sets;
  8.     vector<int> parent;
  9.     vector<int> size;
  10.     vector<vector<int>> content;
  11.  
  12. public:
  13.  
  14.     explicit DSU(int n) {
  15.         num_of_sets = n;
  16.         parent.resize(n);
  17.         size.resize(n, 1);
  18.         content.resize(n);
  19.         for (int i = 0; i < n; i++) {
  20.             parent[i] = i;
  21.             content[i].emplace_back(i);
  22.         }
  23.     }
  24.  
  25.     int getParent(int v) {
  26.         if (parent[v] == v)
  27.             return v;
  28.         return parent[v] = getParent(parent[v]);
  29.     }
  30.  
  31.     void joinSets(int set1, int set2) {
  32.         set1 = getParent(set1);
  33.         set2 = getParent(set2);
  34.         if (set1 != set2) {
  35.             if (size[set1] < size[set2])
  36.                 swap(set1, set2);
  37.  
  38.             content[set1].insert(content[set1].end(), content[set2].begin(), content[set2].end());
  39.             content[set2].clear();
  40.  
  41.             parent[set2] = set1;
  42.             size[set1] += size[set2];
  43.             num_of_sets--;
  44.         }
  45.     }
  46.  
  47.     int getNumOfSets() const {
  48.         return num_of_sets;
  49.     }
  50.  
  51.     vector<int> getContent(){
  52.         return content[getParent(0)];
  53.     }
  54. };
  55.  
  56.  
  57. int main() {
  58.     int n;
  59.     cin >> n;
  60.     DSU a(n);
  61.     for (int i = 0; i < n - 1; i++){
  62.         int v1, v2;
  63.         cin >> v1 >> v2;
  64.         v1--;
  65.         v2--;
  66.         a.joinSets(v1, v2);
  67.     }
  68.     auto answer = a.getContent();
  69.     for (auto &i : answer)
  70.         cout << i + 1 << ' ';
  71.  
  72.     return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement