Advertisement
Guest User

Untitled

a guest
Sep 15th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.76 KB | None | 0 0
  1. class DSU:
  2. """
  3. Disjoint set union with union-by-rank
  4. """
  5. def __init__(self, n):
  6. # may need to alter the total number, like (n + 1)
  7. self.parent = list(range(n))
  8. self.rank = [0] * n
  9. # count of dsu
  10. self.count = n
  11.  
  12. def find(self, x):
  13. if self.parent[x] != x:
  14. self.parent[x] = self.find(self.parent[x])
  15. return self.parent[x]
  16.  
  17. def union(self, x, y):
  18. i, j = self.find(x), self.find(y)
  19. if i != j:
  20. if self.rank[i] < self.rank[j]:
  21. self.parent[i] = j
  22. elif self.rank[i] > self.rank[j]:
  23. self.parent[j] = i
  24. else:
  25. self.parent[i] = j
  26. self.rank[j] += 1
  27.  
  28. self.count -= 1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement