AtCoder Beginner Contest 291 F問題 Teleporter and Closed off
問題
提出解答
問題の概要
有向グラフ がある. ここで,
である. また, 有向辺については次のようになっている.
- かつ の 文字目が
このとき, において, は頂点 から頂点 へ到達可能か? 可能ならば頂点 間の距離を求めよ.
ここで, とは から頂点 及び から出る辺と に入る辺を全て取り除いた有向グラフである.
制約
- は からなる長さ の文字列
- ならば, の 文字目は [\texttt{0}] である.
解法
であるので, において, 頂点 から頂点 へ到達可能ならば, 距離は 以上である. よって, 有向辺を つ以上利用することになる.
よって, どの有向辺を利用するかで場合分けする. ここで, を使う移動の方法については となる における, 上での移動の方法に有効である.
を使う場合における における頂点 から頂点 への移動の方法は
- 頂点 から頂点 へ.
- .
- 頂点 から頂点 へ.
である. 上と下のパートについてはそれぞれ最短距離で移動すればよく, 独立に選ぶことができる.
よって, を経由する場合における 上の頂点 から頂点 への辺の本数の最小値は
である.
これを全ての辺について動かすことにより,
となる.
ここで, は頂点 から始める の BFS, は の辺を全て反転させた有向グラフ における頂点 からの BFS で共に 時間で求めることができる.
そして, となる の個数は高々 個である. よって, 時間で求めることができた.