# サイズ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]++