Disjoint Sets (Union-Find)

1/0
1.0x

Disjoint Sets (Union-Find)

O(α(n))Space: O(n)

Pseudocode

1procedure makeSet(x)
2 parent[x] ← x
3 rank[x] ← 0
4procedure find(x)
5 if parent[x] ≠ x
6 parent[x] ← find(parent[x]) // path compression
7 return parent[x]
8procedure union(x, y)
9 rx ← find(x), ry ← find(y)
10 if rx = ry, return // already same set
11 if rank[rx] < rank[ry]: swap rx, ry
12 parent[ry] ← rx // union by rank
13 if rank[rx] = rank[ry]: rank[rx]++