Union : 서로 다른 두 개의 집합을 하나의 집합으로 병합하는 연산
// Union (두 집합 합치기)
public void union(int a, int b) {
a = find(a);
b = find(b);
if (a != b) parent[b] = a;
}
Find : 하나의 원소가 어떤 집합(대표 부모)에 속해있는지 재귀 호출로 구한다.
// Find (부모 찾기)
public int find(int a) {
if (parent[a] == a) return a;
// a의 부모 노드가 자기 자신이 아닐 경우
// a 노드의 부모 값을 계속 재귀 호출하여 대표 부모 값(집합)을 찾는다.
else return parent[a] = find(parent[a]);
}
→ 이때 parent는 초기 값이 자기 자신이다. 즉, parent[0] = 0, parent[1] = 1, … 이라는 의미!