Graph DP: 트리/DAG 위 DP
Graph DP, 트리 DP, Tree DP, DAG DP
정의
Graph DP 는 그래프 구조를 이용한 DP. 사이클 없는 그래프 (트리, DAG) 에서 특히 자연스러움.
Tree DP
루트 트리에서 자식 서브트리 결과를 조합.
void dfs(int u, int p) {
dp[u] = 1; // 자기 자신
for (int v : adj[u]) if (v != p) {
dfs(v, u);
dp[u] += dp[v]; // 서브트리 크기 예
}
}
Rerooting (모든 루트 답)
Tree DP 는 특정 루트 기준. 모든 정점을 루트로 했을 때의 답이 필요하면 rerooting.
두 번의 DFS:
- 임의 루트 r 로 down DP:
dp_down[u]= u 서브트리 정보 - Down 정보 이용 up DP:
dp[u]= u 를 루트로 한 전체 답
O(N).
DAG DP
DAG 는 위상 정렬 후 순서대로 계산.
- longest path:
dp[v] = max(dp[u] + w) for u -> v - path 수 세기:
dp[v] = sum(dp[u]) for u -> v
참고
이 글의 용어 (3개)
- 비트마스크 DP (Bitmask DP)algorithm
- 정의 비트마스크 DP (Bitmask DP) 는 상태 공간이 부분집합 으로 표현될 때, 각 부분집합을 정수의 비트로 인코딩해 DP 상태로 삼는 기법. N ≤ 20 범위에서 O(2…
- 위상 정렬 (Topological Sorting)algorithm
- 정의 위상 정렬 (Topological Sorting) 은 방향 비순환 그래프 (DAG) 의 모든 정점을 간선 방향을 어기지 않도록 일렬로 나열하는 것. 간선 가 있으면 정렬 결…
- 트리의 지름 (Tree Diameter)algorithm
- 정의 트리의 지름 (Tree Diameter) 는 트리에서 가장 먼 두 노드 사이의 거리 (경로 길이). 가중치 없는 트리는 간선 개수, 가중치 트리는 간선 가중치 합. 대표 알…
💬 댓글