// 1717 집합의 표현 // union find// 경로압축 -> 대표 루트로 업데이트해준다. #include<bits/stdc++.h>#define NMAX 1000001usingnamespace std;
int n, m;
int cmd, a, b;
int parent[NMAX+1];
intgetParent(int a){
if(parent[a] == a) return a;
return parent[a] = getParent(parent[a]); // find 한 값을 배열에 저장 후 반환 //return getParent(parent[a]);
}
boolfind(int a, int b){
// 같은 집합이면 true, 아니면 false int x = getParent(a);
int y = getParent(b);
return x == y;
}
void _union(int a, int b){
// 최상위 부모 int x = getParent(a);
int y = getParent(b);
if (x<y) parent[y] = parent[x];
else parent[x] = parent[y];
}
intmain(){
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
// n: 0 ~ n+1개의 집합 1 ~ 1,000,000// m: 입력으로 주어지는 연산의 개수 1 ~ 100,000scanf("%d %d", &n, &m);
// 초기화for(int i=0; i<n+1; i++){
parent[i] = i;
}
for(int i=0; i<m; i++){
scanf("%d %d %d", &cmd, &a, &b);
if (cmd == 0){ // a가 포함되어 있는 집합과 b가 포함되어 있는 집합을 합친다
_union(a, b); // 같은 집합으로 만든다
}
else{ // 두 원소가 같은 집합에 포함되어 있는지 // a와 b가 같은 집합에 포함되어 있으면 if (find(a, b)) printf("yes\n");
// 그렇지 않다면 elseprintf("no\n");
}
}
return0;
}