公式

K - Minimize Transfer Time 解説 by hint908

別解

全体解説に載っている解法とは異なる解法です。

「空港 \(1\) を時刻 \(S\) に出発するとき、空港 \(N\) に到着する時刻の最小値は \(?\)」という問題は通常の Dijkstra 法で解くことができます。

上記の問題を解いた後、「空港 \(1\) を時刻 \(S-k\) \((k>0)\)に出発するとき、空港 \(N\) に到着する時刻の最小値は \(?\)」という問題を解くことを考えます。
このとき、時刻 \(S\) に空港 \(1\) を出発した際に使用できたフライトを考慮する必要はありません。そのようなフライトを使用しても、時刻 \(S-k\) ではなく時刻 \(S\) に出発した方が移動時間は短くなるからです。

空港 \(1\) を出発する時刻の降順に Dijkstra 法を適用します。
各空港を出発するフライトについては出発時刻の降順に並べておき、フライトを使用できるならば以降では考慮しないものとすればよいです。
(次に見る添え字を保持してインクリメントする、優先度付きキューを使用するなどの実装が考えられます。)

投稿日時:
最終更新: