STUDY/ALGO | DS

[알고리즘] Union-Find (유니온 파인드)

0298 2021. 8. 14. 19:43

Union-Find (유니온 파인드)

 

 

 

1. Union-Find

- 합집합 찾기 알고리즘

- Disjoint-Set, 서로소 집합 이라고도 한다.

- 2개의 서로 다른 노드(x, y)를 선택했을 때, 2개의 노드가 같은 집합(그래프)에 속하는지 확인하는 알고리즘

 

 

 

2. Union

- 서로 다른 2개의 노드 x, y가 포함되어 있는 집합을 합치는 연산

1
2
3
4
 int find(int x) {
     if(x == parent[x]) return x;
     return parent[x] = find(parent[x]);
}
cs

 

 

3. Find

- 노드 x가 어떤 집합에 포함되어 있는지 체크하는 연산. 루트 노드 반환.

1
2
3
4
5
6
7
void union(int x, int y) { // y > x
    x = find(x);
    y = find(y);
        
    // 부모가 다른 경우
    if(x != y) parent[y] = x;
}
cs

 

 

4. 참고 문제

1) [백준] 집합의 표현

https://void2017.tistory.com/305

 

[백준] 1717 집합의 표현

https://www.acmicpc.net/problem/1717 1717번: 집합의 표현 첫째 줄에 n(1 ≤ n ≤ 1,000,000), m(1 ≤ m ≤ 100,000)이 주어진다. m은 입력으로 주어지는 연산의 개수이다. 다음 m개의 줄에는 각각의 연산이 주..

void2017.tistory.com