- Today
- Total
- PS
- ์๋ฐ
- ๋ฐฑ์ค
- spring
- ์กธ์ ์ํ
- MST
- ๋ฒจ๋งํฌ๋
- ๊ตฌํ
- CS
- BFS
- ์ธํด
- array
- dp
- Algorithm
- ์๋ฐ์์ ์
- pytorch
- OOP
- ์๋ฃ๊ตฌ์กฐ
- ํ๋ก๊ทธ๋๋จธ์ค
- database
- ๋ฌธ๋ฒ
- ๊ทธ๋ฆฌ๋
- tree
- java
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- Graph
- leetcode
- ๋ฐฑ์๋
- ๋ค์ต์คํธ๋ผ
- ์์์ ๋ ฌ
Partially Committed
[๋ฐฑ์ค 15681] ํธ๋ฆฌ์ ์ฟผ๋ฆฌ (ํธ๋ฆฌ DP) ๋ณธ๋ฌธ
[๋ฐฑ์ค 15681] ํธ๋ฆฌ์ ์ฟผ๋ฆฌ (ํธ๋ฆฌ DP)
WonderJay 2023. 6. 7. 12:1015681๋ฒ: ํธ๋ฆฌ์ ์ฟผ๋ฆฌ (acmicpc.net)
ํธ๋ฆฌ์์ DP ๋ฅผ ์ฌ์ฉํ๋ ์ ๋ฌธ ๋ฌธ์ !
๋ฌธ์ ๋ ๋จ์ํ๋ค.
Q ๊ฐ์ ์ฟผ๋ฆฌ๊ฐ ๋ค์ด์ค๋ฉด ์ด์ ๋ฐ๋ฅธ ์ถ๋ ฅ์ ํด์ฃผ๋ฉด ๋๋ค.
์ฟผ๋ฆฌ๋ ๋ ธ๋ V ์ ๋ํ ์๋ธ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ๋ ธ๋๋ค์ ๊ฐ์๋ฅผ ๋ฐํํ๋ ๊ฒ์ด๋ค.
์ ๋ ฅ ์กฐ๊ฑด์ ๋ณด๋ฉด,
ํธ๋ฆฌ์ ํฌ๊ธฐ๋ ์๋นํ ํฐ ํธ์ด๊ธฐ๋ ํ์ง๋ง,
์ฟผ๋ฆฌ๊ฐ ์ต๋ 100,000 ๊ฐ๊ฐ ๋ค์ด์ฌ ์ ์๋ค.
๋ ธ๋ V ์ ๋ํ ์๋ธ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ ๋ ธ๋ ๊ฐ์๋ฅผ ์นด์ดํ ํ๋ ๊ฐ์ฅ ์ฌ์ด ๋ฐฉ๋ฒ์ธ
V ์ ๋ํ dfs ํ์์ ์ฟผ๋ฆฌ๋ง๋ค ์ํํ๋ค๋ฉด
์ฌ์ค, ๊ณ์ฐํด๋ณด์ง ์์๋ ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ ๊ฒ์์ ์ ์ ์๋ค.
์๊ฐ ์ด๊ณผ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฐ๋ณต๋ ์ฐ์ฐ์ ๋ฉ๋ชจ์ด์ ์ด์ ํ์ฌ dp ํ ์ด๋ธ์ ์ ์ฅํ๊ณ ,
์ฟผ๋ฆฌ๊ฐ ๋ฐ์ํ๋ฉด ๊ทธ๋ฅ dp ์์ ๊บผ๋ด์ ์ถ๋ ฅํ๋๋ก ํ์.
์๋์ ๊ฐ์ ํธ๋ฆฌ๊ฐ ์ฃผ์ด์ง๋ค๋ฉด,
1 ๋ฒ ๋ ธ๋์ ๋ํ ์๋ธ ๋ ธ๋๋ฅผ ๊ตฌ์ฑํ๋ ์ ์ ์ ๊ฐ์๋ ์๊ธฐ ์์ ์ ํฌํจํ 7
2 ๋ฒ ๋ ธ๋์ ๋ํ ์๋ธ ๋ ธ๋๋ฅผ ๊ตฌ์ฑํ๋ ์ ์ ์ ๊ฐ์๋ ์๊ธฐ ์์ ์ ํฌํจํ 3
3 ๋ฒ ๋ ธ๋์ ๋ํ ์๋ธ ๋ ธ๋๋ฅผ ๊ตฌ์ฑํ๋ ์ ์ ์ ๊ฐ์๋ ์๊ธฐ ์์ ์ ํฌํจํ 3
4,5,6,7 ๋ฒ ๋ ธ๋์ ๋ํ ์๋ธ ๋ ธ๋๋ฅผ ๊ตฌ์ฑํ๋ ์ ์ ์ ๊ฐ์๋ ์๊ธฐ ์์ ์ ํฌํจํ 1
์๊ฐํด๋ณด๋ฉด
1๋ฒ ๋ ธ๋์ ๋ํ ์๋ธ ๋ ธ๋๋ฅผ ๊ตฌ์ฑํ๋ ์ ์ ์ ๊ฐ์๋
= 2 ๋ฒ ๋ ธ๋์ ๋ํ ์๋ธ ๋ ธ๋๋ฅผ ๊ตฌ์ฑํ๋ ์ ์ ์ ๊ฐ์ + 3 ๋ฒ ๋ ธ๋์ ๋ํ ์๋ธ ๋ ธ๋๋ฅผ ๊ตฌ์ฑํ๋ ์ ์ ์ ๊ฐ์
์ด๋ค.
2 ๋ฒ ๋ ธ๋์ ๋ํ ์๋ธ ๋ ธ๋๋ฅผ ๊ตฌ์ฑํ๋ ์ ์ ์ ๊ฐ์๋
= 4 ๋ฒ ๋ ธ๋์ ๋ํ ์๋ธ ๋ ธ๋๋ฅผ ๊ตฌ์ฑํ๋ ์ ์ ์ ๊ฐ์ + 5 ๋ฒ ๋ ธ๋์ ๋ํ ์๋ธ ๋ ธ๋๋ฅผ ๊ตฌ์ฑํ๋ ์ ์ ์ ๊ฐ์์ด๋ค.
์ด์ ๊ฐ์ด ํฐ ๋ฌธ์ ๊ฐ ์์ ๋ฌธ์ ๋ก ์ชผ๊ฐ์ง๋ ํน์ฑ์ ์ด์ฉํ์ฌ ํธ๋ฆฌ์ ๋ํ ์๋ธ ๋ ธ๋ ๊ฐ์๋ฅผ ๋ชจ๋ ๊ณ์ฐํ๋ ํจ์๋ฅผ ์์ฑํ ์ ์๋ค.
dp ํ ์ด๋ธ์ 0 ์ผ๋ก ์ด๊ธฐํํ๊ณ ,
root ๋ ธ๋์ ๋ฐฉ๋ฌธํ๋ค. (์ฌ๊ธฐ์๋ 1)
๊ทธ๋ฆฌ๊ณ ์๋ธ ๋ ธ๋ ๊ฐ์๋ฅผ ์นด์ดํ ํ ๋ณ์์ธ ret ์ 1 ๋ก ์ด๊ธฐํํ๋ค.
๊ทธ๋ฆฌ๊ณ dp[1] ์ ํ์ธํ์ ๋ 0 ์ด๋ผ๋ฉด, ๋ ์์ ๋ฌธ์ ๋ฅผ ํ์ธํ๋ค.(์ฐ๊ฒฐ ๋ ธ๋๋ฅผ ํ์)
1๊ณผ ์ฐ๊ฒฐ๋ 2, 3 ๋ ธ๋์ ๋ํ์ฌ dp[2] , dp[3] ์ด 0 ์ด๋ผ๋ฉด 2 ๋ฒ, 3 ๋ฒ ๋ ธ๋์ ๋ํด์ ๋ ์์ ๋ฌธ์ ๋ฅผ ํ์ธํ๊ณ
ret ์ ๊ทธ ๊ฒฐ๊ณผ๊ฐ์ ๋์ ์ํจ๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ dp[ํ์ฌ ํ์ํ๊ณ ์๋ ๋ ธ๋] ์ ret ์ ์ฐจ๋ก๋๋ก ์ ์ฅํ๋ค๋ณด๋ฉด ๊ฒฐ๊ตญ ์ ์ฒด ํธ๋ฆฌ์ dp ํ ์ด๋ธ์ด ์ฑ์์ง๋ ๊ตฌ์กฐ์ด๋ค.
์ฌ์ค ๋ง๋ก ์ค๋ช ํ๋ฉด ์ ์๋ฟ์ง ์์ ๊ฒ ๊ฐ๋ค..
์๋ ์ฝ๋๋ฅผ ๋ณด๊ณ ์ดํดํ๋ ๊ฒ ๋ ์ฌ์ธ ๊ฒ์ด๋ค.
import java.io.*;
import java.util.*;
public class Main {
/*
ํธ๋ฆฌ์ ์ ์ ์ ์ N๊ณผ ๋ฃจํธ์ ๋ฒํธ R, ์ฟผ๋ฆฌ์ ์ Q๊ฐ ์ฃผ์ด์ง๋ค. (2 ≤ N ≤ 105, 1 ≤ R ≤ N, 1 ≤ Q ≤ 105)
์ด์ด N-1์ค์ ๊ฑธ์ณ, U V์ ํํ๋ก ํธ๋ฆฌ์ ์ํ ๊ฐ์ ์ ์ ๋ณด๊ฐ ์ฃผ์ด์ง๋ค. (1 ≤ U, V ≤ N, U ≠ V)
์ด๋ U์ V๋ฅผ ์ ๋์ ์ผ๋ก ํ๋ ๊ฐ์ ์ด ํธ๋ฆฌ์ ์ํจ์ ์๋ฏธํ๋ค.
์ด์ด Q์ค์ ๊ฑธ์ณ, ๋ฌธ์ ์ ์ค๋ช
ํ U๊ฐ ํ๋์ฉ ์ฃผ์ด์ง๋ค. (1 ≤ U ≤ N)
์
๋ ฅ์ผ๋ก ์ฃผ์ด์ง๋ ํธ๋ฆฌ๋ ํญ์ ์ฌ๋ฐ๋ฅธ ํธ๋ฆฌ์์ด ๋ณด์ฅ๋๋ค.
*/
static int n;
static int r;
static int q;
static ArrayList<Integer>[] tree;
static boolean[] visited;
static int[] dp;
public static void main(String[] args) throws IOException {
System.setIn(new FileInputStream("src/input.txt"));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
StringTokenizer stk;
stk = new StringTokenizer(br.readLine());
int n = Integer.parseInt(stk.nextToken());
int r = Integer.parseInt(stk.nextToken());
int q = Integer.parseInt(stk.nextToken());
tree = new ArrayList[n + 1];
for (int i = 0; i <= n; i++) {
tree[i] = new ArrayList<>();
}
for (int i = 0; i < n - 1; i++) {
stk = new StringTokenizer(br.readLine());
int a = Integer.parseInt(stk.nextToken());
int b = Integer.parseInt(stk.nextToken());
tree[a].add(b);
tree[b].add(a);
}
dp = new int[n + 1];
visited = new boolean[n + 1];
find(r);
while (q-- > 0) {
int t = Integer.parseInt(br.readLine());
bw.write(dp[t] + "\n");
}
bw.flush();
bw.close();
}
static int find(int v) {
visited[v] = true;
int ret = 1;
if (dp[v] == 0) {
for (int iter : tree[v]) {
if (!visited[iter]) {
ret += find(iter);
visited[iter] = true;
}
}
dp[v] = ret;
}
return dp[v];
}
}
'๐ฅ Algorithm || ๋ฌธ์ ํ์ด > PS' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[๋ฐฑ์ค 1931] ํ์์ค ๋ฐฐ์ (0) | 2023.07.28 |
---|---|
[๋ฐฑ์ค 1213] ํฐ๋ฆฐ๋๋กฌ ๋ง๋ค๊ธฐ JAVA (๋ฌธ์์ด, ๊ทธ๋ฆฌ๋, ๊ตฌํ) (0) | 2023.06.26 |
[๋ฐฑ์ค 9019] DSLR ์๋ฐ(BFS + ๊ฒฝ๋ก ์ถ์ ) (0) | 2023.06.03 |
[๋ฐฑ์ค 1162 ๋๋กํฌ์ฅ] ์๋ฐ (๋ค์ต+DP) (0) | 2023.05.28 |
[InOrder ์ PostOrder ๋ก๋ถํฐ PreOrder ๊ตฌํ๊ธฐ] ๋ฐฑ์ค 2263 ํธ๋ฆฌ์ ์ํ (JAVA) (0) | 2023.03.22 |