티스토리 뷰

Union-Find

공통 원소가 없는 상호 배타적인 부분 집합들로 나눠진 원소들을 저장, 조작하는 자료구조


Java code

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
31
32
33
34
35
public class UnionFind {
    int[] root;
    int[] rank;
    
    public UnionFind(int N){
        root = new int[N];
        rank = new int[N];
        for(int i=0; i<N; i++){
            root[i] = i;
            rank[i] = 1;
        }
    }
    
    public int find(int a){
        if(a == root[a]) return a;
        return root[a] = find(root[a]);
    }
    
    public int union(int a, int b){
        if(a == -1 && b == -1return -1;
        if(a == -1return find(b);
        if(b == -1return find(a);
        a = find(a);
        b = find(b);
        if(a == b) return a;
        if(rank[a] > rank[b]){ //항상 높이가 작은걸 큰것에 붙임
            int temp = a;
            a = b;
            b = temp;
        }
        root[a] = b;
        if(rank[a] == rank[b]) rank[b]++;
        return b;
    }
}
cs


댓글
최근에 올라온 글
최근에 달린 댓글
«   2025/01   »
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 31
Total
Today
Yesterday
글 보관함