Alex_tz307

DSU

Sep 11th, 2020
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.93 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. vector < int > p, r;
  6.  
  7. inline int get(int a) {
  8.     return p[a] = (p[a] == a ? a : get(p[a]));
  9. }
  10.  
  11. void Union(int u, int v) {
  12.     int a = get(u);
  13.     int b = get(v);
  14.     if(r[a] == r[b])
  15.         ++r[a];
  16.     if(r[a] > r[b])
  17.         p[b] = a;
  18.     else
  19.         p[a] = b;
  20. }
  21.  
  22. int main() {
  23.     ios_base::sync_with_stdio(false);
  24.     cin.tie(nullptr);
  25.     cout.tie(nullptr);
  26.     int N, Q;
  27.     cin >> N >> Q;
  28.     p.resize(N), r.resize(N);
  29.     for(int i = 0; i < N; ++i) {
  30.         p[i] = i;
  31.         r[i] = 1;
  32.     }
  33.     while(Q--) {
  34.         string type;
  35.         int u, v;
  36.         cin >> type >> u >> v;
  37.         --u, --v;
  38.         if(type == "union")
  39.             Union(u, v);
  40.         else {
  41.             int a = get(u);
  42.             int b = get(v);
  43.             if(a == b)
  44.                 cout << "YES\n";
  45.             else
  46.                 cout << "NO\n";
  47.         }
  48.     }
  49. }
  50.  
Advertisement
Add Comment
Please, Sign In to add comment