https://www.acmicpc.net/problem/1717
union-find
import java.io.*;
import java.util.*;
public class Main {
static int n,m;
static int[] parent;
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
// n,m
n = Integer.parseInt(st.nextToken());
m = Integer.parseInt(st.nextToken());
parent = new int [n+1];
for(int i=1;i<=n;i++){
parent[i] = i;
}
// m번 반복으로 입력 값 받음
for(int i=0;i<m;i++){
st = new StringTokenizer(br.readLine());
int type = Integer.parseInt(st.nextToken());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
// 0 a b -> 합치기
if(type == 0) union(a,b);
// 1 a b -> 부모 동일한지 테스트 -> YES/NO
else if(type==1){
if(find(a)==find(b)) System.out.println("YES");
else System.out.println("NO");
}
}
}
static void union(int a, int b){
a = find(a);
b = find(b);
if(a==b) return;
else{
parent[b] = a;
}
}
static int find(int x){
return parent[x] == x ? x : find(parent[x]);
}
}
union
static void union(int a, int b){
a = find(a);
b = find(b);
if(a==b) return;
if(deep[a]<deep[b]){
int t = a;
a=b;
b=t;
}
parent[b] = a;
if(deep[a]==deep[b]) deep[a]++;
size[a] += size[b];
componetNum --;
return;
}