33. 実際の実装
33
合併
def unite(self, x, y):
x = self.root(x)
y = self.root(y)
if x == y: return True
if self.rank[x] < self.rank[y]: x, y = y, x
if self.rank[x] == self.rank[y]: self.rank[x] += 1
self.parent[y] = x
return False
x,yのrootを得た後、rankの大きい方に、rankの小さい方を子としてマージする。
rankが等しければrankを1増やす(ランクによる合併)。
34. 実際の実装
34
a b c d e
0 1 2 3 4
2 3 2 3 1→3
0 1 1 2 0
parent
rank
a
dc
b
e
root(4) = 3
35. 実際の実装
35
a b c d e
0 1 2 3 4
2 3 2→3 3 1
0 1 1 2 0
parent
rank
a
d
c
b
e
unite(0, 1) = False