Advertisement
Alex_tz307

DSU

Aug 16th, 2021
735
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.70 KB | None | 0 0
  1. struct edge {
  2.   int u, v, w;
  3.  
  4.   void read() {
  5.     cin >> u >> v >> w;
  6.   }
  7.  
  8.   bool operator < (const edge &A) const {
  9.     return w < A.w;
  10.   }
  11. };
  12.  
  13. struct DSU {
  14.   vector<int> p, r;
  15.  
  16.   DSU(int n) {
  17.     p.resize(n + 1);
  18.     iota(p.begin(), p.end(), 0);
  19.     r.assign(n + 1, 1);
  20.   }
  21.  
  22.   int get(int x) {
  23.     if (x == p[x])
  24.       return x;
  25.     return p[x] = get(p[x]);
  26.   }
  27.  
  28.   int get_size(int u) {
  29.     return r[get(u)];
  30.   }
  31.  
  32.   bool connected(int u, int v) {
  33.     return get(u) == get(v);
  34.   }
  35.  
  36.   bool unite(int u, int v) {
  37.     int x = get(u), y = get(v);
  38.     if (x == y)
  39.       return false;
  40.     if (r[x] > r[y])
  41.       swap(x, y);
  42.     p[x] = y;
  43.     r[y] += r[x];
  44.     return true;
  45.   }
  46. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement