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; + } +} +```