アットウィキロゴ
競技プログラミング用 知識集積所
掲示板 掲示板 ページ検索 ページ検索 メニュー メニュー

競技プログラミング用 知識集積所

ABC431E - Reflection on Grid

最終更新:

sport_programming

- view
管理者のみ編集可


問題


必要知識

B以下レベルの内容は省略

考え方

全てのマス、全ての方向について、「そこをそのように通過するために必要な鏡の変更数」を最短経路問題として調べ切ればよい。
鏡を変更せずに行ける方向はコスト0、鏡を変更すれば行ける方向はコスト1なので、01最良優先探索※を使えばよい。

グラフの頂点は、マスの数H*W個それぞれに4方向と、最後のゴールで1つ、全部で4*H*W+1個分作るとよい。

問題は、同じマスを2回通る経路がある場合の扱い。
1度目と2度目で異なる角度の鏡にはできないことへのケアが必要そうに思える。
しかし実は、同じマスを2回通る場合は、1度目に入ってから2度目に出るまでの間でコストが1以上あるパターンは考えなくてよい。
なぜなら、その場合は直接目的の方向に曲げてしまえばコスト1でそのマスを1度しか通らない経路を作れるからである。
また、間がコストが0なのであれば、1度目と2度目で異なる角度の鏡になる状況は考えなくてよい。
よって、いろいろややこしいことが発生しそうな状況は全部無視できるのである。

解答例


注意点


別解

最近更新されたスレッド
ウィキ募集バナー