import sys
sys.setrecursionlimit(1000000)
input = sys.stdin.readline
N = int(input())
Tree = [[] for _ in range(N+1)]
check = [True for _ in range(N+1)]
for _ in range(N-1):
u, v=map(int, input().split())
Tree[u].append(v)
Tree[v].append(u)
dp = [[0,0] for _ in range(N+1)]
def dfs(cur):
check[cur] = False
dp[cur][0] = 0 #포함 x
dp[cur][1] = 1 #포함 o
for i in Tree[cur]:
if check[i]:
dfs(i)
dp[cur][0] += dp[i][1]
dp[cur][1] += min(dp[i][1], dp[i][0])
dfs(1)
print(min(dp[1][0], dp[1][1]))
https://www.acmicpc.net/problem/2533
다소 생소하면서도 dp에 대한 생각을 확장시켜준 문제
'컴퓨터 > 코테' 카테고리의 다른 글
블록이동하기(드론 조종) - bfs (0) | 2021.09.10 |
---|---|
카카오 외벽 점검 (0) | 2021.09.10 |
카카오 매출하락 최소화 - 트리 dp (0) | 2021.09.10 |
백준 5569, 11726 - 출근 경로, 2xn 타일링 [dp] (0) | 2021.09.08 |
백준 7576 - 토마토 (0) | 2021.09.07 |