Skip to content

Commit 83c22c2

Browse files
committed
[Gold V] Title: 집합의 표현, Time: 380 ms, Memory: 52316 KB -BaekjoonHub
1 parent cdf2054 commit 83c22c2

File tree

2 files changed

+64
-55
lines changed

2 files changed

+64
-55
lines changed

백준/Gold/1717. 집합의 표현/README.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,18 @@
1-
# [Gold IV] 집합의 표현 - 1717
1+
# [Gold V] 집합의 표현 - 1717
22

33
[문제 링크](https://www.acmicpc.net/problem/1717)
44

55
### 성능 요약
66

7-
메모리: 52132 KB, 시간: 4804 ms
7+
메모리: 52316 KB, 시간: 380 ms
88

99
### 분류
1010

11-
자료 구조(data_structures), 분리 집합(disjoint_set)
11+
자료 구조, 분리 집합
12+
13+
### 제출 일자
14+
15+
2025년 12월 28일 11:59:49
1216

1317
### 문제 설명
1418

Lines changed: 57 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,59 @@
1-
import java.io.BufferedReader;
2-
import java.io.InputStreamReader;
3-
import java.util.StringTokenizer;
1+
import java.io.*;
2+
import java.util.*;
43

54
public class Main {
6-
static int parent[];
7-
static int N;
8-
static int M;
9-
10-
11-
private static int getparent(int x) {
12-
if(parent[x] == x) return x;
13-
return getparent(parent[x]);
14-
}
15-
16-
17-
private static void unionparent(int a, int b) {
18-
a = getparent(a);
19-
b = getparent(b);
20-
if(a < b) parent[b] = a;
21-
else parent[b] = getparent(a);
22-
}
23-
24-
public static void main(String[] args) throws Exception {
25-
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
26-
StringTokenizer st = new StringTokenizer(br.readLine());
27-
StringBuilder sb = new StringBuilder();
28-
29-
N = Integer.parseInt(st.nextToken());
30-
M = Integer.parseInt(st.nextToken());
31-
parent = new int [N + 1];
32-
for (int i = 0; i < N + 1; i++) parent[i] = i;
33-
34-
for (int i = 0; i < M; i++) {
35-
st = new StringTokenizer(br.readLine());
36-
int calculation = Integer.parseInt(st.nextToken());
37-
int a = Integer.parseInt(st.nextToken());
38-
int b = Integer.parseInt(st.nextToken());
39-
40-
//부모 합치기
41-
if(calculation == 0) {
42-
unionparent(a, b);
43-
44-
}else {
45-
if(getparent(a) == getparent(b)) sb.append("YES").append("\n");
46-
else sb.append("NO").append("\n");
47-
}
48-
}
49-
System.out.println(sb);
50-
51-
52-
}
53-
54-
}
5+
static final String Y = "YES\n";
6+
static final String N = "NO\n";
7+
static int n, m;
8+
static int[] p;
9+
static StringTokenizer st;
10+
static StringBuilder sb = new StringBuilder();
11+
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
12+
static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
13+
public static void main(String[] args) throws Exception{
14+
st = new StringTokenizer(br.readLine());
15+
n = Integer.parseInt(st.nextToken());
16+
m = Integer.parseInt(st.nextToken());
17+
p = new int[n + 1];
18+
19+
for(int i = 0; i < n + 1; i++) p[i] = i;
20+
21+
int cal, a, b;
22+
for(int i = 0; i < m; i++){
23+
st = new StringTokenizer(br.readLine());
24+
cal = Integer.parseInt(st.nextToken());
25+
a = Integer.parseInt(st.nextToken());
26+
b = Integer.parseInt(st.nextToken());
27+
28+
if(cal == 0){
29+
if(a == b) continue;
30+
union(a, b);
31+
}else{
32+
if(find(a) == find(b)) sb.append(Y);
33+
else sb.append(N);
34+
}
35+
}
36+
bw.append(sb);
37+
bw.close();
38+
}
39+
40+
static int find(int a){
41+
if(p[a] == a) return p[a];
42+
return find(p[a]);
43+
}
44+
45+
static boolean union(int a, int b){
46+
a = find(a);
47+
b = find(b);
48+
49+
if(a == b){
50+
return true;
51+
} else if(a < b){
52+
p[a] = b;
53+
} else{
54+
p[b] = a;
55+
}
56+
return false;
57+
}
58+
}
59+

0 commit comments

Comments
 (0)