Advertisement
Guest User

DSU

a guest
Dec 18th, 2014
1,084
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.70 KB | None | 0 0
  1. class dsuClass {
  2.     public:
  3.  
  4.     int n;
  5.     vector<int> parent;
  6.     vector<int> size;
  7.    
  8.     int sccCount;
  9.    
  10.     void init(int n) {
  11.         this->n = n;
  12.         parent.resize(n);
  13.         size.resize(n);
  14.         reset();
  15.     }
  16.    
  17.     void reset() {
  18.         sccCount = n;
  19.         FOR (i, 0, n) parent[i] = i;
  20.         FOR (i, 0, n) size[i] = 1;
  21.     }
  22.    
  23.     int update(int a) {
  24.         if (parent[a] == a) return a;
  25.         return parent[a] = update(parent[a]);
  26.     }
  27.    
  28.     void join(int a, int b) {
  29.         a = update(a);
  30.         b = update(b);
  31.         if (size[b] > size[a]) swap(a, b);
  32.         if (a == b) return;
  33.        
  34.         size[a] += size[b];
  35.  
  36.         parent[b] = a;
  37.         sccCount--;
  38.     }
  39.    
  40.     bool isMaster(int v) {
  41.         return parent[v] == v;
  42.     }
  43.  
  44.     void updateAll() {
  45.         FOR (i, 0, n) update(i);
  46.     }
  47. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement