# 基于大小为N的森林的不相交集合
class DisjointSet:
parent # 保存构成了森林的各节点的父节点的数组
rank # 管理 rank 的数组
init(): # 初始化
for i ← 0 to N-1:
parent[i] ← i
rank[i] ← 0
unite(x, y):
root1 ← findSet(x)
root2 ← findSet(y)
link(root1, root2)
findSet(x):
if paret[x] ≠ x:
parent[x] ← findSet(parent[x])
return parent[x];
link(x, y):
if rank[x] > rank[y]:
parent[y] ← x
else:
parent[x] ← y
if rank[x] = rank[y]:
rank[y]++