반응형
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;
public class BJ_1717_2 {
static int parent[];
static BufferedWriter bww;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
bww = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer st = new StringTokenizer(br.readLine());
int N = Integer.parseInt(st.nextToken());
int M = Integer.parseInt(st.nextToken());
parent = new int[N+1];
for(int i=0; i<=N; i++) {
parent[i] = i;
}
for(int i=0; i<M; i++) {
st = new StringTokenizer(br.readLine());
int oz = Integer.parseInt(st.nextToken()); //0이면 합집합, 1이면,,,
int a = Integer.parseInt(st.nextToken());
int b = Integer.parseInt(st.nextToken());
if(oz == 0) {
Union(a,b);
}else {
Find(a,b); //같은 집합인지 찾기
}
}
bww.flush();
bww.close();
}
private static void Find(int a, int b) throws IOException {
if(getParent(a) == getParent(b)) {
bww.write("YES"+"\n");
}else {
bww.write("NO"+"\n");
}
}
private static int getParent(int a) {
if(parent[a] == a) {
return a;
}else {
return parent[a] = getParent(parent[a]);
}
}
private static void Union(int a, int b) {
a = getParent(a);
b = getParent(b);
if(a != b) { //여기서 바로 getParent(a) != gatParent(b) 하면 틀렸다고 뜬다 .. 왜?
//
parent[b] = a;
}
}
}
private static void Union(int a, int b) {
a = getParent(a);
b = getParent(b);
if(a != b) { // a와 b의 부모가 같지 않으면 , b의 부모를 a의 부모로 바꿈
//여기서 바로 getParent(a) != gatParent(b) 하면 틀렸다고 뜬다
//--> 이건 a와 b의 부모가 같지 않으면 b의 부모를 a로 바꿔서
parent[b] = a; // 이름을 parentA , parentB로 바꿔서 풀어야 할 듯,, 그냥 a, b랑 헷갈리니깐
}
}
여기서 굉장히 멘붕왔는데 지금 보니 별거 아니네 ,,ㅎㅎ
반응형
'백준알고리즘' 카테고리의 다른 글
[Java][그리디 알고리즘] 백준 11047 동전 0 (0) | 2021.04.28 |
---|---|
[Java][정렬] 백준 1026 보물 (0) | 2021.04.27 |
백준 1976 여행 가자 JAVA Union-Find (0) | 2020.07.08 |
백준 숫자판 점프 2210 JAVA DFS (0) | 2020.07.07 |
백준 계란으로 계란치기 16987번 JAVA DFS (0) | 2020.07.07 |
댓글