본문으로 건너뛰기
김신건의 로그

Graph DP: 트리/DAG 위 DP

· 수정 · 📖 약 1분 · 186자/단어 #algorithm #dp #graph #tree
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:

  1. 임의 루트 r 로 down DP: dp_down[u] = u 서브트리 정보
  2. 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) 는 트리에서 가장 먼 두 노드 사이의 거리 (경로 길이). 가중치 없는 트리는 간선 개수, 가중치 트리는 간선 가중치 합. 대표 알…

💬 댓글

사이트 검색 / 명령어

검색

스크롤 = 확대/축소 · 드래그 = 이동 · 0 = 원래 크기 · ESC = 닫기