유니온 파인드 처음으로 풀어보는 문제다. 개념을 처음 받아들일 땐 어렵지 않은 것 같은데 활용하기가 무진장 어려워 보인다.


<코드>

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
#include <stdio.h>
 
int n, m, d[1000001], ord, a, b;
 
int f(int x) {
    return x == d[x] ? x : d[x] = f(d[x]);
}
 
void u(int x, int y) {
    x = f(x);
    y = f(y);
    if (x != y) d[y] = x;
}
 
int main() {
    scanf("%d%d"&n, &m);
    for (int i = 0; i <= n; i++) d[i] = i;
    while (m--) {
        scanf("%d%d%d"&ord, &a, &b);
        if (ord) 
            printf(f(a) == f(b) ? "YES\n" : "NO\n");
        else 
            u(a, b);
    }
    return 0;
}
cs


'BOJ' 카테고리의 다른 글

1976 여행 가자  (0) 2017.09.06
4195 친구 네트워크  (0) 2017.09.06
1649 택시  (1) 2017.09.06
10319 좀비 아포칼립스  (0) 2017.09.05
1574 룩 어택  (0) 2017.09.04

+ Recent posts