Skip to content

Commit 4ccd665

Browse files
committed
[Gold V] Title: 여러분의 다리가 되어 드리겠습니다!, Time: 500 ms, Memory: 81704 KB -BaekjoonHub
1 parent 34a1099 commit 4ccd665

2 files changed

Lines changed: 98 additions & 0 deletions

File tree

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
# [Gold V] 여러분의 다리가 되어 드리겠습니다! - 17352
2+
3+
[문제 링크](https://www.acmicpc.net/problem/17352)
4+
5+
### 성능 요약
6+
7+
메모리: 81704 KB, 시간: 500 ms
8+
9+
### 분류
10+
11+
그래프 이론, 자료 구조, 그래프 탐색, 분리 집합
12+
13+
### 제출 일자
14+
15+
2025년 7월 5일 19:53:06
16+
17+
### 문제 설명
18+
19+
<p>선린월드에는 <em>N</em>개의 섬이 있다. 섬에는 1, 2, ..., <em>N</em>의 번호가 하나씩 붙어 있다. 그 섬들을 <em>N </em>- 1개의 다리가 잇고 있으며, 어떤 두 섬 사이든 다리로 왕복할 수 있다.</p>
20+
21+
<p><strong>어제까지는 그랬다.</strong></p>
22+
23+
<p>"왜 다리가 <em>N </em>- 1개밖에 없냐, 통행하기 불편하다"며 선린월드에 불만을 갖던 욱제가 다리 하나를 무너뜨렸다! 안 그래도 불편한 통행이 더 불편해졌다. 서로 왕복할 수 없는 섬들이 생겼기 때문이다. 일단 급한 대로 정부는 선린월드의 건축가를 고용해, 서로 다른 두 섬을 다리로 이어서 다시 어떤 두 섬 사이든 왕복할 수 있게 하라는 지시를 내렸다.</p>
24+
25+
<p>그런데 그 건축가가 당신이다! 안 그래도 천하제일 코딩대회에 참가하느라 바쁜데...</p>
26+
27+
### 입력
28+
29+
<p>첫 줄에 정수 <em>N</em>이 주어진다. (2 ≤ <em>N</em> ≤ 300,000)</p>
30+
31+
<p>그 다음 <em>N</em> - 2개의 줄에는 욱제가 무너뜨리지 않은 다리들이 잇는 두 섬의 번호가 주어진다.</p>
32+
33+
### 출력
34+
35+
<p>다리로 이을 두 섬의 번호를 출력한다. 여러 가지 방법이 있을 경우 그 중 아무거나 한 방법만 출력한다.</p>
36+
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
import java.io.BufferedReader;
2+
import java.io.InputStreamReader;
3+
import java.math.BigInteger;
4+
import java.io.IOException;
5+
import java.util.ArrayList;
6+
import java.util.Arrays;
7+
import java.util.StringTokenizer;
8+
9+
class Main {
10+
11+
static int parent[];
12+
13+
public static void main(String[] args) throws IOException {
14+
15+
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
16+
17+
int N = Integer.parseInt(br.readLine());
18+
19+
parent = new int[N+1];
20+
21+
for(int i =1; i<=N; i++) {
22+
parent[i] = i;
23+
}
24+
25+
for(int i=0; i<N-2; i++) {
26+
StringTokenizer st = new StringTokenizer(br.readLine());
27+
28+
int u = Integer.parseInt(st.nextToken());
29+
int v = Integer.parseInt(st.nextToken());
30+
union(u,v);
31+
}
32+
33+
String answer = "";
34+
for(int i = 1; i<=N; i++) {
35+
if(find(i) ==i) {
36+
answer+= i+" ";
37+
}
38+
}
39+
System.out.println(answer);
40+
}
41+
42+
static void union(int a, int b) {
43+
int parentA = find(a);
44+
int parentB = find(b);
45+
46+
if(parentA == parentB) return;
47+
48+
if(parentA < parentB) {
49+
parent[parentB] = parentA;
50+
}
51+
else {
52+
parent[parentA] = parentB;
53+
}
54+
}
55+
56+
static int find(int x) {
57+
if(parent[x] !=x) {
58+
parent[x] = find(parent[x]);
59+
}
60+
return parent[x];
61+
}
62+
}

0 commit comments

Comments
 (0)