문제 링크
- http://icpc.me/17624
문제 출처
- 2019 KOI 2차대회 고등부 3번
사용 알고리즘
- Tree DP
풀이
대회 도중에 문제를 보면서
- Tree DP를 해야한다는 것과
- 어떤 정점 v를 포함하면서 검은 돌은 i개 갖고 있는 서브 트리의 크기의 최대/최소를 구하면 될 것 같다
는 생각을 했었습니다.
구현을 못해서, 그리고 시간이 얼마 남지 않아서 못 풀긴 했습니다만…
dp1[v][i] = v를 포함하면서 검은 돌을 i개 갖고 있는 서브트리의 최소 크기
dp2[v][i] = v를 포함하면서 검은 돌을 i개 갖고 있는 서브트리의 최대 크기
라고 정의해놓고 tree dp를 돌려서 값을 미리 구해놓는다면, 각 쿼리는 O(1)에 처리할 수 있습니다.
v를 포함하면서 검은 돌은 i개 갖고 있는 서브 트리의 크기가 연속적인 것의 증명은 koosaga님 블로그에 잘 나와있습니다.
전체 코드
1 |
|