문제 링크
- http://icpc.me/13145
사용 알고리즘
- 듀얼 그래프
- 다익스트라
풀이
최소 비용은 다익스트라로 쉽게 구할 수 있으니까 넘어가고, 최대 비용을 구하는 방법을 생각해봅시다.
주어지는 그래프가 평면 그래프이기 때문에 Dual Graph를 생각해볼 수 있습니다.
일반적인 dual graph는 위 그림처럼 바깥쪽 영역을 하나의 영역으로 간주합니다. 바깥쪽 영역을 조금 더 자세하게 표현하기 위해 4개의 정점과 6개의 간선을 추가해봅시다.
1번 정점과 N번 정점이 연결되기 전까지는 원본 그래프에서 아직 건설하지 않은 간선들만 이용해 up에서 down으로 갈 수 있습니다.
1번 정점과 N번 정점이 연결된 후에는 건설하지 않은 간선들만을 이용해 up에서 down으로 갈 수 없습니다.
마지막에 건설하는 간선이 평면 P-Q를 연결하는 간선이라면 정답은 (전체 간선의 가중치 합) - (up에서 P까지의 최단 거리) - (down에서 Q까지의 최단 거리)가 됩니다.
이것은 up에서 출발하는 다익스트라와 down에서 출발하는 다익스트라를 각각 돌려준 다음, 모든 간선에 대해 all - D1[P] - D2[Q]
와 같이 구해줄 수 있습니다.
기하 문제 특성상 구현이 많이 귀찮습니다.
전체 코드
1 |
|