문제 링크
- http://icpc.me/10715
문제 출처
- 2015 JOI 3번
사용 알고리즘
- Dijkstra
시간복잡도
- O(E log V)
풀이
광장 u까지의 거리가 dist[u]고, u 를 거쳐서 가는 가장 가까운 광장이 v, v까지의 거리가 dist[v]라고 합시다.
dist[u]와 dist[v] 사이에 있는 값으로 X를 잡으면 철거하는 도로는 늘어나지 않았는데 비용만 늘었으니까 항상 X = dist[u]일 때보다 손해 입니다.
다익스트라를 돌리면서 정점 u를 볼 때, X = dist[u]라면 공사 비용 = C * dist[u] + 철거하지 않은 간선 입니다.
철거하는 간선들은 지금까지 방문한 정점들 사이에 놓인 간선들입니다.
모든 간선 거리의 합을 구해두고, 공사 비용을 구하기 전에, 인접한 간선들을 순회해서 방문한 정점이 나온다면 그 간선의 거리를 빼주고 공사 비용을 계산하면 됩니다.
전체 코드
1 |
|