문제 링크
- http://icpc.me/20030
사용 알고리즘
- Segment Tree & Lazy Propagation
- HLD & Euler Tour Trick
- Sparse Table
- Parametric Search
시간복잡도
- $O(N + Q \log^2 N)$
풀이
정점의 가중치가 바뀌는 상황에서 Weighted Centroid를 구하는 문제입니다.
1번 쿼리는 Euler Tour Trick으로, 2번 쿼리는 HLD로 처리할 수 있습니다.
Euler Tour Trick을 이용해 트리를 선형으로 폅시다. Weighted Centroid의 서브트리는 항상 median 지점을 포함합니다. 그러므로 median 지점에서 시작해 조상으로 올라가면서 Centroid를 찾으면 됩니다.
Naive하게 올라가면 N개의 정점을 탐색하기 때문에 비효율적입니다. Sparse Table을 이용한 Parametric Search를 이용하면 $O(\log N)$개의 정점만 봐도 됩니다. 자세한 구현은 아래 코드를 참고해주세요.
전체 코드
1 |
|