damihenrique

Untitled

Feb 3rd, 2015
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.65 KB | None | 0 0
  1. int pset[111], ranki[111], size[111];
  2.  
  3. void init(int n){
  4.     rep(i,0,n+1){
  5.         pset[i] = i;
  6.         ranki[i] = 0;
  7.         size[i] = 1;
  8.     }  
  9. }
  10.  
  11. int findset(int x){
  12.     if(x != pset[x])
  13.         pset[x] = findset(pset[x]);
  14.     return pset[x];  
  15. }  
  16.  
  17. bool sameset(int x, int y){
  18.     return findset(x) == findset(y);
  19. }  
  20.  
  21. void unionset(int x, int y){
  22.     x = findset(x);
  23.     y = findset(y);
  24.     if(x == y) return;
  25.     if(ranki[x] > ranki[y]){
  26.         pset[y] = x;
  27.         size[x] += size[y];  
  28.     }
  29.     else{
  30.         pset[x] = y;
  31.         size[y] += size[x];
  32.         if(ranki[x] == ranki[y])
  33.             ranki[y]++;
  34.     }
  35. }
Advertisement
Add Comment
Please, Sign In to add comment