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