๐ ๋ฌธ์ ๋งํฌ
https://www.acmicpc.net/problem/19542
โธ ๋ฌธ์
ํ๋ฏผ์ด๋ ํธ๋ฆฌ ๋ชจ์์ ๊ธธ ์์์ ์คํ ๋ฐ์ด๋ฅผ ํ๊ณ ์ ๋จ์ง๋ฅผ ๋๋ฆฌ๋ ค๊ณ ํ๋ค. ํ๋ฏผ์ด์ ๋ชฉํ๋ ์ผ๋์ํํธ์์ ์ถ๋ฐํ์ฌ ๋ชจ๋ ๋ ธ๋์ ์ ๋จ์ง๋ฅผ ๋๋ฆฌ๊ณ , ๋ค์ ์ผ๋์ํํธ๋ก ๋์์ค๋ ๊ฒ์ด๋ค. ํ๋ฏผ์ด๋ ํ์ด ์ข๊ธฐ ๋๋ฌธ์ ํ์ฌ ๋ ธ๋์์ ๊ฑฐ๋ฆฌ๊ฐ D ์ดํ์ธ ๋ชจ๋ ๋ ธ๋์ ์ ๋จ์ง๋ฅผ ๋๋ฆด ์ ์๋ค.
๋ ์จ๊ฐ ๋งค์ฐ ๋ฅ๊ธฐ ๋๋ฌธ์, ํ๋ฏผ์ด๋ ์ต์ํ๋ง ์ด๋ํด์ ๋ชฉํ๋ฅผ ๋ฌ์ฑํ๊ณ ์ถ๋ค! ํ๋ฏผ์ด๋ฅผ ์ํด ํ๋ฏผ์ด๊ฐ ์ด๋ํด์ผ ํ๋ ์ด ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํด์ฃผ์.
โธ ์ ๋ ฅ
์ฒซ๋ฒ์งธ ์ค์๋ ๋ ธ๋์ ๊ฐ์ N(1≤N≤100 000)๊ณผ ์ผ๋์ํํธ์ ์์น S(1≤S≤N), ํ D(0≤D≤N)์ด ์ฃผ์ด์ง๋ค.
๋ ๋ฒ์งธ ์ค๋ถํฐ N๋ฒ์งธ ์ค๊น์ง, ํธ๋ฆฌ์ ๊ฐ์ ์ ๋ณด๋ฅผ ์๋ฏธํ๋ ๋ ์์ฐ์ x, y๊ฐ ๊ณต๋ฐฑ์ผ๋ก ๊ตฌ๋ถ๋์ด ์ฃผ์ด์ง๋ค. ์ด๋ x๋ฒ ๋ ธ๋์ y๋ฒ ๋ ธ๋๊ฐ ์ฐ๊ฒฐ๋์ด ์์์ ์๋ฏธํ๋ค. (1≤x,y≤N, x≠y)
์ฃผ์ด์ง๋ ์ฐ๊ฒฐ๊ด๊ณ๋ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ฉฐ, ๋ชจ๋ ๊ฐ์ ์ ๊ธธ์ด๋ 1์ด๋ค.
โธ ์ถ๋ ฅ
ํ๋ฏผ์ด๊ฐ ๋ชฉํ๋ฅผ ์์ํ๊ธฐ ์ํด ์ด๋ํด์ผ ํ๋ ์ต์ ๊ฑฐ๋ฆฌ๋ฅผ ์ถ๋ ฅํ์ฌ๋ผ.
๐ ๋ฌธ์ ์ ๋ณด
- ๐ฅ ๋ฌธ์ ๋ ๋ฒจ : ๊ณจ๋ 3
- ๐ ๋ฌธ์ ์ ํ : ๊ทธ๋ํ ์ด๋ก , ๊ทธ๋ํ ํ์, ํธ๋ฆฌ, ๊น์ด ์ฐ์ ํ์
- ๐ฌ ํ์ด ์ธ์ด : JAVA
๐ค ๋ฌธ์ ํ์ด
ํธ๋ฆฌ ํํ์ ๋งต์์ ์ ๋จ์ง๋ฅผ ๋ฐฐํฌํ ๋, ์ต์ํ์ผ๋ก ์ด๋ํ๋ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ ๋ฌธ์ ์ด๋ค.
๋ฌธ์ ์์ ํ๋ฏผ์ด๋ ๊ฑฐ๋ฆฌ๊ฐ D ์ดํ์ธ ๋ชจ๋ ๋
ธ๋์ ์ ๋จ์ง๋ฅผ ์ง์ ๋ฐฉ๋ฌธํ์ง ์๊ณ ๋ ๋ฐฐํฌํ ์ ์๋ค.
์ฆ, ๋ฆฌํ ๋
ธ๋์์๋ถํฐ ๊ฑฐ๋ฆฌ๊ฐ D๋ฅผ ์ด๊ณผํ๋ ๋
ธ๋๋ค๋ง ์ง์ ๋ฐฉ๋ฌธํ๋ฉด ๋๋ค.
1๏ธโฃ DFS ํ์์ ํตํด ๊ฐ ๋ ธ๋์ ์ต๋ Depth๋ฅผ ๊ณ์ฐํ๋ค.
- ๊ฐ ๋ ธ๋์์ ๊ฐ์ฅ ๊น์ ๋ ธ๋๊น์ง์ ๊ฑฐ๋ฆฌ(Depth)๋ฅผ ๊ตฌํ๋ค.
- DFS๋ฅผ ์ํํ๋ฉด์, ํ์ฌ ๋ ธ๋์ Depth๋ฅผ ์์ ๋ ธ๋ ์ค ์ต๋ Depth+1๋ก ๊ฐฑ์ ํ๋ค.
2๏ธโฃ ๊น์ด๊ฐ D๋ฅผ ์ด๊ณผํ๋ ๋ ธ๋๊น์ง ์ด๋ํด์ผ ํ๋ค.
- DFS ํ์ ๊ณผ์ ์์, Depth ๊ฐ์ด D๋ฅผ ์ด๊ณผํ๋ ๋ ธ๋๊น์ง ์ด๋ํด์ผ ํ๋ฏ๋ก ํด๋น ๋ ธ๋๋ฅผ ์นด์ดํธํ๋ค.
- ์ด ๋ ธ๋๋ค์ ํ๋ฏผ์ด๊ฐ ์ง์ ์ด๋ํด์ผ ํ๋ฏ๋ก cnt ๊ฐ์ ์ฆ๊ฐ์ํจ๋ค.
3๏ธโฃ ์๋ณต ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๋ค.
- ๋ชจ๋ ๋ ธ๋์ ์ ๋จ์ง๋ฅผ ๋๋ฆฌ๊ณ ๋ค์ ์ถ๋ฐ ์ง์ ์ผ๋ก ๋์์์ผ ํ๋ฏ๋ก, ์ด๋ํด์ผ ํ๋ ๊ฐ์ ๊ฐ์์ 2๋ฅผ ๊ณฑํด ์๋ณต ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ๋ค.
๐ ์ฐธ๊ณ
ํธ๋ฆฌ๋ ์ฌ์ดํด์ด ์๋ ์ฐ๊ฒฐ ๊ทธ๋ํ์ด๋ฏ๋ก, ํน์ ๋ ธ๋์์ ๋ค๋ฅธ ๋ ธ๋๊น์ง์ ์ต๋จ ๊ฑฐ๋ฆฌ๋ ๊ฐ์ ์ ๊ฐ์๋ก ํํ๋๋ค.
๋ฐ๋ผ์, ํ์ํ ๋ฐฉ๋ฌธ ํ์๋ฅผ ๊ตฌํ ํ, 2๋ฅผ ๊ณฑํ์ฌ ์๋ณต ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํ ์ ์๋ค.
์์ ์ ๋ ฅ 1์ ์์๋ก ๋ค์ด๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
1
|
2
/ \
3 4
|
5
|
6
- S = 1 (์ถ๋ฐ์ )
- D = 1 → ๊น์ด๊ฐ 1 ์ดํ์ธ ๋ ธ๋๋ ์๋์ผ๋ก ์ ๋จ์ง ๋ฐฐํฌ๊ฐ ๊ฐ๋ฅํ๋ค.
- ๋ฐ๋ผ์, ๊น์ด๊ฐ 1์ ์ด๊ณผํ๋ ๋ ธ๋(๊น์ด 2 ์ด์)๋ง ๋ฐฉ๋ฌธํ๋ฉด ๋๋ค.
D = 1์ธ ๊ฒฝ์ฐ, ์ด๋ํด์ผ ํ๋ ๋ ธ๋๋ฅผ ๋ณด๋ฉด ๋ค์๊ณผ ๊ฐ๋ค. → ๊น์ด๊ฐ 1๋ณด๋ค ํฐ ๋ ธ๋ ์ง์ ๋ฐฉ๋ฌธ
๋ ธ๋ | ๊น์ด | ์ง์ ๋ฐฉ๋ฌธ ์ฌ๋ถ |
2 | 4 | โ |
3 | 3 | โ |
4 | 1 | โ (์๋ ๋ฐฐํฌ ๊ฐ๋ฅ) |
5 | 2 | โ |
6 | 1 | โ (์๋ ๋ฐฐํฌ ๊ฐ๋ฅ) |
๋ฐ๋ผ์, ์ง์ ๋ฐฉ๋ฌธํด์ผ ํ๋ ๋ ธ๋๋ 2, 3, 5๋ฒ์ด๋ค.
์ฆ, ์ด๋ํด์ผ ํ๋ ๊ฐ์ ์ ๊ฐ์ cnt = 3์ด๊ณ , ์๋ณต ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๋ฉด ๊ฒฐ๊ณผ๋ 6์ด ๋๋ค.
์ ํ์ด๋ฅผ ์ฝ๋๋ก ์์ฑํด ๋ณด๋ฉด ์๋์ ๊ฐ๋ค.
โ ์ต์ข ์ฝ๋
๋ฉ๋ชจ๋ฆฌ : 64284KB
์๊ฐ : 400ms
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.StringTokenizer;
public class Main {
static int n, s, d, cnt;
static ArrayList<Integer>[] list;
static int[] depth;
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
StringTokenizer st = new StringTokenizer(br.readLine());
n = Integer.parseInt(st.nextToken()); // ๋
ธ๋์ ๊ฐ์
s = Integer.parseInt(st.nextToken()); // ์ผ๋์ํํธ์ ์์น
d = Integer.parseInt(st.nextToken()); // ํ
list = new ArrayList[n+1];
for (int i = 0; i <= n; i++) {
list[i] = new ArrayList<>();
}
int x, y;
for (int i = 1; i < n; i++) {
st = new StringTokenizer(br.readLine());
x = Integer.parseInt(st.nextToken());
y = Integer.parseInt(st.nextToken());
list[x].add(y);
list[y].add(x);
}
depth = new int[n+1];
dfs(s, -1);
// ์๋ณต ๊ฐ์ ์ ๊ฐฏ์ == ์์์ ์ ์ ์ธํ ๋ฐฉ๋ฌธ๋
ธ๋์ ๊ฐ์*2
System.out.println(cnt*2);
}
private static int dfs(int start, int parent) {
// ๋ฆฌํ ๋
ธ๋๋ฅผ ์์์ผ๋ก depth๋ฅผ 1์ฉ ์ฆ๊ฐ์ํค๊ธฐ
for (int next : list[start]) {
if (next != parent) {
// ์๋ธ๋
ธ๋๊ฐ 2๊ฐ ์ด์์ผ ๊ฒฝ์ฐ ๋ ๊น์ depth ๊ฐ์ ์ ์ฉ
depth[start] = Math.max(depth[start], dfs(next, start)+1);
}
}
// ๋
ธ๋์ ๊ฑฐ๋ฆฌ๊ฐ d๊ฐ ๋๋ ๊ฒฝ์ฐ ํ์ํ๋ ๋
ธ๋์ด๋ฏ๋ก
// ์์์ ์ ์นด์ดํธํ์ง ์์๋ ๋จ
if (start != s && depth[start] >= d) {
cnt++; // ์นด์ดํธ
}
return depth[start];
}
}
์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ ๋งค์ผ ํ์ด๋ ํ์ด๋ ์๋กญ๊ณ ์ด๋ ต๋ค..
๊ทธ๋๋ ๋ธ๋ก๊ทธ ํฌ์คํ ํ๋ฉด์ ํ ๋ฒ ๋ ์ ๋ฆฌ ๊ฒธ ๋ณต์ตํ๋๊น ์ดํด๊ฐ ์ข ๋ ์ ๋๋ ๊ฒ ๊ฐ๊ธฐ๋..๐
'Algorithm > BOJ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Boj_7579] ์ฑ (0) | 2025.03.25 |
---|---|
[Boj_1577] ๋๋ก์ ๊ฐ์ (0) | 2025.03.19 |
[Boj_1937] ์์ฌ์์ด ํ๋ค (0) | 2025.03.04 |
[Boj_22963] 3์ด ์ ๋ ฌ (0) | 2025.02.26 |
[Boj_2550] ์ ๊ตฌ (0) | 2025.02.20 |