# JOIG2022/2023 春合宿 B - テレポーター (Teleporter)
## 問題リンク
- https://atcoder.jp/contests/joigsp2023/tasks/joigsp2023_b
## 解説
### 方針
思いつく方針としては,次のようなものがあります.
- 具体的な最適な戦略を考える
- 全探索を高速化する(dpなど)
今回はdpを駆使して探索を行います.
### 考察
以下のようなことが分かります.
- 2人が最適な戦略をとるとする.ビ太郎が頂点 $N$ に到達できるならば,ビ太郎が同じ頂点を $2$ 回以上訪れることはない.
もしビ太郎が同じ頂点を通るならば, その時点でビ太郎は状態をループしていることになり, ビバ子の最適な戦略によりビ太郎は永遠に頂点 $N$ に到達できません.
### 解法
上の考察により,状態がビ太郎の位置のみにより決定できることが分かります.
よって,以下のようなdpが思いつきます.
- $f(i)=$ ビ太郎が頂点 $i$ にいて,この状態から2人が最適な戦略をとるとする. この状態から頂点 $N$ に到達するために必要なラウンド数.(到達できないなら $+\infty$)
遷移を考えると以下が成り立ちます:
$$ f(i) =\min_{j=1,2,\dots,A_i}\left( \max\left(f(P_{i,j}),f(Q_{i,j})\right)+1\right)$$
あとはこれを $f(i)$ の昇順に埋めていくことで求めることができます(dijkstraっぽくやる)
### 実装
- https://atcoder.jp/contests/joigsp2023/submissions/44889808
よく考えるとpriority_queueでなく,普通のququeでよいです.
- https://atcoder.jp/contests/joigsp2023/submissions/44890486