질문
설명하다
‘0 a b’가 주어지면 집합 a와 b를 병합합니다.
‘1 a b’가 주어지면 a와 b가 같은 집합인지 확인합니다.
Union Find를 수행할 수 있으며 아래 블로그에 자세히 설명되어 있습니다.
한 줄 한 줄 천천히 읽으면 바로 이해할 수 있습니다.
(알고리즘) Union-Find – Brandon의 패션 블로그()
#include <iostream>
using namespace std;
int parent(1000001);
int find(int x) {
return parent(x) == x ? x : parent(x) = find(parent(x));
}
void merge(int x, int y) {
x = find(x);
y = find(y);
if (x !
= y) parent(y) = x;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int n, m;
cin >> n >> m;
for (int i = 1; i < 1000001; i++) {
parent(i) = i;
}
for (int i = 0; i < m; i++) {
int q, a, b;
cin >> q >> a >> b;
if (q == 0) {
merge(a, b);
} else {
if (find(a) == find(b)) {
cout << "YES\n";
} else {
cout << "NO\n";
}
}
}
return 0;
}