728x90
union-find
주의
find 연산 시, 재귀 함수에서 나오면서 탐색한 모든 노드의 대표 노드값을 이번 연산에서 발견하면 대표 노드로 변경하는 부분.
union 연산에서 선택된 노드끼리 연결하는 것이 아닌 선택된 노드의 대표 노드끼리 연결하는 부분.
https://www.acmicpc.net/problem/1717
import java.io.*;
import java.util.*;
public class Main {
static int[] num;
public static void main(String[] args) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
int[] input = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
int n=input[0], m=input[1];
num = new int[n+1];
for(int i=0; i<=n; i++){
num[i]=i;
}
for(int i=0; i<m; i++){
int[] data = Arrays.stream(br.readLine().split(" ")).mapToInt(Integer::parseInt).toArray();
if(data[0]==0) union(data[1], data[2]);
else System.out.println(find(data[1]) == find(data[2]) ? "YES" : "NO");
}
} catch(Exception e){
System.out.println(e);
}
}
static void union(int a, int b){
int aa = find(a);
int bb = find(b);
if(aa != bb) num[bb]=aa;
}
static int find(int n){
if(num[n] == n){
return n;
} else {
return num[n] = find(num[n]);
}
}
}
728x90
'algorithm > algorithm' 카테고리의 다른 글
[Algorithm] CCW (0) | 2023.08.31 |
---|---|
[Algorithm] 에라토스테네스의 체 (0) | 2023.02.09 |
[Algorithm] greedy (0) | 2023.02.09 |
[Algorithm] binary search (0) | 2023.02.09 |
[Algorithm] DFS & BFS (0) | 2023.02.08 |