以下の内容はhttps://emtubasa.hateblo.jp/entry/2019/03/11/214153より取得しました。


AOJ 3055 - こたつがめを燃やさないで (RUPC2019 Day2 E)

問題
提出コード

解法

マス目を移動する際のコストを辺とみなしながらダイクストラ法を用いていくとよいです。
遷移の種類はいくつかあり、

  • コストAで、塀でない上下左右の隣接したマスに移動する

  • コストA+Bで、上下左右の隣接したマスに移動する

  • コスト2A+Bで、右上、右下、左上、左下の斜めのマスに移動する

です。
もちろん、下の2つの遷移を行うには、今いるマスを含めて周囲9マスのどこにも爆弾が存在しない、という条件が必要です。
しかし、斜めに移動する遷移を先に行っておくことにより、どの塀がまだ存在しているか、という情報を持つ必要はなくなります。
あとは、これをもとにしてダイクストラ法を用いることによって、答えを求めることができます。

感想

ダイクストラ法で、priority_queueにプッシュする要素は、最短コストを更新(もしくは初めて来た)場合なのですが、現状の最短コストと等しい場合にもプッシュをしてしまうと、ほぼほぼTLEします。
ということを過去何回もやってきたのですが、今回もやらかしました。悲しいです。




以上の内容はhttps://emtubasa.hateblo.jp/entry/2019/03/11/214153より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14