Algorithm
Union & Find 알고리즘
zzunsik
2022. 3. 17. 23:23
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
static int N;
static int[] parents;
// 단위집합 생성
static void makeSet() {
parents = new int[N];
// 자신의 부모노드를 자신의 값으로 세팅
for (int i = 0; i < N; i++)
parents[i] = i;
}
// a의 집합 찾기 : a의 대표자 찾기
static int findSet(int a) {
if (a == parents[a])
return a;
// 내 부모를 찾고 찾아온 부모로 갱신
return parents[a] = findSet(parents[a]); // path compression
}
static boolean union(int a, int b) {
int aRoot = findSet(a);
int bRoot = findSet(b);
if (aRoot == bRoot)
return false;
parents[bRoot] = aRoot;
return true;
}
|
cs |