Guest User

Untitled

a guest
Mar 17th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.29 KB | None | 0 0
  1. public static class WeightedQuickUnion {
  2. private int [] components, sizeComponents;
  3. private int countComponents;
  4.  
  5. public WeightedQuickUnion(int size) {
  6. components = new int [size];
  7. sizeComponents = new int [size];
  8. for (int i = 0; i < size ; i++) {
  9. components[i] = i;
  10. sizeComponents[i] = 1;
  11. }
  12. countComponents = size;
  13. }
  14.  
  15. public void union(int p, int q) {
  16. int rootP = root(p);
  17. int rootQ = root(q);
  18. if(rootP == rootQ)
  19. return;
  20. if(sizeComponents[rootP] < sizeComponents[rootQ]) {
  21. components[rootP] = rootQ;
  22. sizeComponents[rootQ] += sizeComponents[rootP];
  23. }
  24. else {
  25. components[rootQ] = rootP;
  26. sizeComponents[rootP] += sizeComponents[rootQ];
  27. }
  28. countComponents--;
  29. }
  30.  
  31. private int root(int p) {
  32. while (components[p] != p)
  33. p = components[p];
  34. return p;
  35. }
  36.  
  37. public boolean sameRoot(int p, int q) {
  38. return root(p) == root(q);
  39. }
  40.  
  41. public int getSizeComponent(int i) {
  42. return sizeComponents[root(i)];
  43. }
  44. }
Add Comment
Please, Sign In to add comment