문제 링크
- http://icpc.me/2586
문제 출처
- 2005 KOI 고등부 3번
사용 알고리즘
- DP
- 그리디
시간복잡도
- $O((P+F) \log (P+F))$
풀이
최적해가 어떤 형태인지, 혹은 특정한 형태를 강제할 수 있는지 생각해봅시다.
소방차와 펌프를 매칭하는 것을 구간이라고 생각하면, 구간들이 서로를 완전히 포함하거나 완전히 분리된 형태의 최적해가 존재합니다.
Proof) $a \leq b \leq c \leq d$ 일 때 $[a, c]$, $[b, d]$를 매칭하는 것이 최적이라면 $[a, d]$, $[b, c]$로 바꿔도 거리는 동일합니다.
최적해에 $[l, r]$ 매칭이 존재한다면, 이 구간 안에 있는 소방차와 펌프는 모두 매칭되어 있습니다.
Proof) 그렇지 않으면 적당히 바꿔서 거리를 더 줄일 수 있습니다.
구간의 포함 관계를 트리(or 포레스트)로 생각할 수 있습니다. 이때 같은 depth에서는 모든 구간이 분리되어 있습니다.
펌프와 소방차의 depth는 아래 과정을 통해 결정할 수 있습니다.
- 입력으로 들어온 모든 좌표를 정렬
- 좌표 순서대로 보면서, 펌프/소방차에 따라 다음 과정을 수행
- 펌프가 나오면 현재 depth에 넣고 depth++
- 소방차가 나오면 –depth하고 depth에 넣음
같은 depth에서는 펌프와 소방차가 교대로 등장합니다.
어떤 depth에 원소가 짝수 개 있다면 순서대로 매칭하면 됩니다.
홀수인 경우, 하나를 빼고 매칭하는 $K$가지 경우를 $O(K)$만에 모두 확인해주면 됩니다.
전체 코드
1 |
|