코드와이
[BAEKJOON] 1717. 집합의 표현 본문
문제링크
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 |