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. 참고 문제
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