문제 링크
- http://icpc.me/1289
문제 출처
- 2008 COI Final Exam #1 2번
사용 알고리즘
- Tree DP
시간복잡도
- $O(N)$
풀이
서브트리 안에서 발생하는 가중치의 합은 아래에서 다 처리하고, 현재 노드를 지나는 경로의 가중치들만 생각합시다.
이진 트리라고 생각해도 상관 없습니다.
현재 노드의 왼쪽에 있는 자손들의 가중치를 $(a_1, a_2, a_3, \ldots)$, 오른쪽에 있는 자손들의 가중치를 $(b_1, b_2, b_3, \ldots)$라고 하면 현재 노드를 지나는 경로들의 가중치의 합은 $(a_1+a_2+a_3+\ldots) \times (b_1+b_2+b_3+\ldots)$가 됩니다.
이 식을 이용해 열심히 구현해주면 됩니다.
쓰고보니 Tree DP가 아닌 것 같기도 하네요.
전체 코드
1 |
|