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 |
'Algorithm' 카테고리의 다른 글
프림 알고리즘 (0) | 2022.03.17 |
---|---|
크루스칼 알고리즘 (0) | 2022.03.17 |
KMP(Knuth-Morris-Pratt) 알고리즘 (0) | 2022.03.10 |
네트워크 플로우(Network Flow) 및 이분 매칭(Bipartite Matching) (0) | 2022.03.07 |
Merge Sort (0) | 2022.02.20 |