Notice
Recent Posts
Recent Comments
Link
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
Tags
more
Archives
Today
Total
관리 메뉴

코드와이

[BAEKJOON] 1717. 집합의 표현 본문

acmicpc

[BAEKJOON] 1717. 집합의 표현

코드와이 2021. 7. 24. 22:18

 

문제링크

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

 

1717번: 집합의 표현

첫째 줄에 n(1 ≤ n ≤ 1,000,000), m(1 ≤ m ≤ 100,000)이 주어진다. m은 입력으로 주어지는 연산의 개수이다. 다음 m개의 줄에는 각각의 연산이 주어진다. 합집합은 0 a b의 형태로 입력이 주어진다. 이는

www.acmicpc.net

 

package acmicpc.Gold4;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.StringTokenizer;

public class 집합의_표현 {

	static int n, m, parents[];
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		StringBuilder sb = new StringBuilder();
		
		n = Integer.parseInt(st.nextToken());
		m = Integer.parseInt(st.nextToken());
		parents = new int[n + 1];
		make();
		
		for(int i = 0 ; i < m ; i++) {
			st = new StringTokenizer(br.readLine());
			int type = Integer.parseInt(st.nextToken());
			int from = Integer.parseInt(st.nextToken());
			int to = Integer.parseInt(st.nextToken());
			
			if(type == 0) {
				union(from, to);
			} else {
				if(findSet(from) == findSet(to)) sb.append("YES").append("\n");
				else sb.append("NO").append("\n");
			}
		}
		System.out.println(sb);
	}
	
	public static void make() {
		for(int i = 0 ; i <= n ; i++) {
			parents[i] = i;
		}
	}
	
	public static int findSet(int x) {
		if(parents[x] == x) return x;
		
		return parents[x] = findSet(parents[x]);
	}
	
	public static void union(int from, int to) {
		int f = findSet(from);
		int t = findSet(to);
		
		parents[t] = f;
	}
}

'acmicpc' 카테고리의 다른 글

[BAEKJOON] 1987. 알파벳  (0) 2021.07.24
[BAEKJOON] 2580. 스도쿠  (0) 2021.07.24
[BAEKJOON] 6593. 상범 빌딩  (0) 2021.07.16
[BAEKJOON] 5582. 공통 부분 문자열  (0) 2021.07.16
[BAEKJOON] 2668. 숫자고르기  (0) 2021.07.14