From 3e594b056bfbd664c041406b02a18e8f607b7bbe Mon Sep 17 00:00:00 2001 From: LiiNi-coder <97495437+LiiNi-coder@users.noreply.github.com> Date: Mon, 29 Dec 2025 15:08:57 +0900 Subject: [PATCH] =?UTF-8?q?[20251229]=20BOJ=20/=20G3=20/=20=EC=8A=A4?= =?UTF-8?q?=ED=81=AC=EB=A3=A8=EC=A7=80=20=EB=AF=BC=ED=98=B82=20/=20?= =?UTF-8?q?=EC=9D=B4=EC=9D=B8=ED=9D=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...\354\247\200 \353\257\274\355\230\2702.md" | 67 +++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 "LiiNi-coder/202512/29 BOJ \354\212\244\355\201\254\353\243\250\354\247\200 \353\257\274\355\230\2702.md" diff --git "a/LiiNi-coder/202512/29 BOJ \354\212\244\355\201\254\353\243\250\354\247\200 \353\257\274\355\230\2702.md" "b/LiiNi-coder/202512/29 BOJ \354\212\244\355\201\254\353\243\250\354\247\200 \353\257\274\355\230\2702.md" new file mode 100644 index 00000000..55e1d2f9 --- /dev/null +++ "b/LiiNi-coder/202512/29 BOJ \354\212\244\355\201\254\353\243\250\354\247\200 \353\257\274\355\230\2702.md" @@ -0,0 +1,67 @@ +```java +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.util.ArrayList; +import java.util.List; + +public class Main{ + private static List> Graph; + private static int N; + private static int[][] Dp; + private static boolean[] Visited; + public static void main(String args[]) throws IOException { + /* + * dfs(2, parent=none) + * dfs(1, parent=2) + * dfs(4, parent=2) + * dfs(3, parent-2) + * + * dfs(1, parent=2) + * */ + BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); + N = Integer.parseInt(br.readLine()); + Dp = new int[N+1][2]; + // [v][0]: 노드v를 루트으로 하는 부분트리(노드v엔 경찰서없음)에서 최소 경찰서개수 + // [v][1]: 노드v를 루트로 하는 부부늩리(노드v엔 경찰서있음)에서 최소 경찰서 개수 + String[] temp; + Visited = new boolean[N+1]; + Graph = new ArrayList>(); + for(int i = 0; i < N+1; i++) + Graph.add(new ArrayList()); + for(int i = 0; i < N-1; i++){ + temp = br.readLine().split(" "); + int a = Integer.parseInt(temp[0]); + int b = Integer.parseInt(temp[1]); + Graph.get(a).add(b); + Graph.get(b).add(a); + } + //dfs + for(int i = 1; i 자식엔 경찰서가 있어도 없어도됨 + Dp[cur][1] += Math.min(Dp[next][0], Dp[next][1]); + //cur노드에 경찰서 두지않음 -> 자식엔 경찰서가 반드시 있어야함 + Dp[cur][0] += Dp[next][1]; + } + Visited[cur] = true; + } +} +```