반응형
public class Q_1717 {

	static int getParent(int[] parent, int x) {
		if(parent[x] == x) return x;
		else return parent[x] = getParent(parent, parent[x]);
	}
	
	static void union(int[] parent, int x, int y) {
		int node1 = getParent(parent, x);
		int node2 = getParent(parent, y);
		
		if(node1 < node2) parent[node2] = node1;
		else parent[node1] = node2;
	}

	static String compare(int[] parent, int x, int y) {
		int node1 = getParent(parent, x);
		int node2 = getParent(parent, y);
		if(node1 == node2) return "YES";
		else return "NO";
	}
	
	public static void main(String[] args) throws IOException {
		int[] parent;
		String[] operArr;
		
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String[] cmd1 = br.readLine().split(" ");
		
		int nodeCount = Integer.parseInt(cmd1[0]);
		int operCount = Integer.parseInt(cmd1[1]);
		
		parent = new int[nodeCount+1];
		operArr = new String[operCount];
		
		//노드 초기화
		for (int i = 1; i < nodeCount+1; i++) {
			parent[i] = i;
		}
		
		//연산 입력
		for (int i = 0; i < operCount; i++) {
			operArr[i] = br.readLine();
		}
		
		for (int i = 0; i < operArr.length; i++) {
			String[] oper = operArr[i].split(" ");

			//명령어 분기
			switch (oper[0]) {
			case "0":
				union(parent, Integer.parseInt(oper[1]), Integer.parseInt(oper[2]));
				break;
			case "1":
				System.out.println(compare(parent, Integer.parseInt(oper[1]), Integer.parseInt(oper[2])));
				break;
			default:
				break;
			}
		}
		
	}
}

 

URL :  https://www.acmicpc.net/problem/1717

 

반응형

+ Recent posts