ツバサの備忘録

主に備忘録代わりに精進記録を載せていくつもりです。

AOJ 2585 - 一日乗車券

問題
提出コード

解法

  • 1日乗り放題になる路線をビットで表したものがsとなるようにする際の、1Dayパスポートの合計金額の最小値

をまず求めます。
これは、配るDPを用いて、v_{i OR j} = min(v_{i OR j},v_{i} + v_{j})を繰り返し計算していけばよいです。O(4^{K})で求まります。
では、乗り放題の路線を決め打ちしてsとした際の、SからTへ行く方法の中で、金額が最小になるものを調べます。
これは、

  • dp_{ij} = i時間後にjにいるような行き方のなかでの金額の最小値

とすると、グラフを拡張してダイクストラ法を使ってあげれば、min(dp_{iT}が答えになります。
初期値は、dp_{0S} = v_{s}です。
これを全ての状態sについて調べ、その最小値を求めれば答えが求まります。

感想

はじめ、Kが24以下であると勘違いして、間に合わないなぁ…って言ってました。状態が少し複雑になるだけでバグを埋め込みやすいので、バグ少なめでかけた点についてはよかったです。