문제 링크
- http://icpc.me/16011
문제 출처
- 2018 BalkanOI Day1 1번
사용 알고리즘
- HLD
- 세그 레이지
- 그리디?
풀이
간선의 상한과 하한을 정해주는 것은 트리를 HLD로 분해한 뒤, 세그 레이지로 비교적 간단하게 처리해줄 수 있습니다.
트리를 복구하는 것이 문제입니다.
u에서 v로 가는 경로의 최소가 m이라는 것은 경로를 이루는 간선 중 가중치가 m인 간선이 있다는 것을 의미하고, 최대가 M이라는 것은 가중치가 M인 간선이 있다는 것을 의미합니다.
간선별로 가중치를 배정해주는 것은 그리디하게 할 수 있습니다.
각 쿼리별로 값을 배정할 수 있는 간선을 구해준 뒤, 간선의 개수가 적은 것 부터 배정할 수 있는 간선 중 아무거나 배정해주면 됩니다.
여담으로, 하이퍼 토마토보다 코드가 깁니다. 제가 BOJ에 제출한 코드 중 가장 긴 코드인 것 같네요.
전체 코드
1 |
|