백준 1717 골드5(자바)
: union 연산 + find 연산 + 대표 노드 개념
import java.io.*;
import java.util.Arrays;
import java.util.StringTokenizer;
public class Main {
public static int[] arr;
public static int N,M;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
N = Integer.parseInt(st.nextToken());
M = Integer.parseInt(st.nextToken());
arr = new int[N+1];
for(int i=0;i<arr.length;i++) {
arr[i] = i;
}
for(int i=0;i<M;i++) {
st = new StringTokenizer(br.readLine());
int UorF = Integer.parseInt(st.nextToken());
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
if(UorF==0) { //union
union(a,b);
}else{
a = find(a);
b = find(b);
if(a!=b){
System.out.println("NO");
}else{
System.out.println("YES");
}
}
}
}
//대표노드 찾기
public static int find(int a){
if(a==arr[a]) return a;
else{
//경로 압축
return arr[a] = find(arr[a]);
}
}
//합치기
public static void union(int a, int b){
a = find(a);
b = find(b);
if(a!=b){
arr[b] = a;
}
}
}