---
# System prepended metadata

title: JOIG2022/2023 春合宿 B - テレポーター (Teleporter)

---

# 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