본문 바로가기
백준알고리즘

백준 1717 집합의 표현 Union-Find JAVA

by tiit 2020. 7. 10.
반응형

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랑 헷갈리니깐 
  }

}

 

여기서 굉장히 멘붕왔는데 지금 보니 별거 아니네 ,,ㅎㅎ 

반응형

댓글