본문 바로가기

Algorithm

Union & Find 알고리즘

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