Boj 1717 집합의 표현

Updated:

문제 링크 : 백준 https://www.acmicpc.net/problem/1717

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.StringTokenizer;

public class Boj_1717 {
	static int[] parent;
	static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	static StringTokenizer st ;
	static StringBuilder sb = new StringBuilder();
	public static void main(String[] args) throws Exception{

		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;
		}

		while(m-- > 0) {
			st = new StringTokenizer(br.readLine());
			int type = Integer.parseInt(st.nextToken());
			int a = Integer.parseInt(st.nextToken());
			int b = Integer.parseInt(st.nextToken());
			if(type==0)
				union(a,b);
			else
				sb.append(isSameParent(a, b) ? "YES\n" : "NO\n");

		}
		System.out.println(sb);
	}


	static void union(int x, int y) {
		x = find(x);
		y = find(y);
		if(x!=y) {
			if(x < y) parent[y] = x;
            else parent[x] = y;
		}
	}


	static int find(int x) {
		if(x == parent[x])
            return x;
        else
            return parent[x] = find(parent[x]);
	}


	static boolean isSameParent(int x, int y) {
        x = find(x);
        y = find(y);
        if(x == y)
            return true;
        else
            return false;
    }

}

Leave a comment