문제 링크
- http://icpc.me/9866
문제 출처
- 2013 USACO December Gold 1번
사용 알고리즘
- 다익스트라
시간복잡도
- $O(MK \log N + KQ)$
풀이
허브의 개수 $K$가 작으므로, (어떤 정점에서 각 허브로 가는 최소 비용)과 (각 허브에서 다른 정점으로 가는 최소 비용)을 각각 전처리하면 된다는 생각을 해볼 수 있습니다.
이 값들을 알고 있으면 (시작점에서 어떤 허브로 가는 최소 비용) + (어떤 허브에서 끝점으로 가는 최소 비용) 중 최솟값이 정답이 됩니다.
각 허브에서 다른 정점으로 가는 최소 비용은 단순히 다익스트라 알고리즘을 $K$번 돌리면 됩니다. 마찬가지로, 어떤 정점에서 각 허브로 가는 것은 그래프의 간선 방향을 반대로 뒤집고 다익스트라 알고리즘을 돌리면 됩니다.
$O(M \log N)$ 다익스트라를 $K$번 돌려서 전처리하면, 쿼리에 대한 정답은 $O(K)$만에 구할 수 있습니다.
전체 코드
1 |
|