코드를 볼까요?
코드 13-5
def weighted_union(self, i, j):
"""
parameters i, j must be roots!
if size[i] < size[j] then parent[i] = j
"""
# abs(parent[i]) = size[i]
# temp_cnt는 음수고 size[i] + size[j]
temp_cnt = self.parent[i] + self.parent[j]
# size[i] < size[j]
if self.parent[i] > self.parent[j]:
self.parent[i] = j
self.parent[j] = temp_cnt
# size[i] > size[j]
else:
self.parent[j] = i
self.parent[i] = temp_cnt
코드 13-5는 weighted_union을 구현한 것입니다. 매개변수 i, j는 반드시 루트여야 합니다. 각 집합이 가진 노드 개수를 비교하여 노드 개수가 많은 집합에 노드 개수가 적은 집합을 자식으로 병합합니다.