AtCoder Beginner Contest 277 E問題 Crystal Switches
問題
提出解答
問題の概要
頂点 辺の単純無向グラフ がある. なお,
である. また, 各辺は赤または青の色があり, ならば赤, ならば青である.
高橋君は最初, 頂点 にいるとき, と青い辺で接続している頂点に移動できる.
しかし, 個の頂点 にはスイッチがあり, スイッチがある頂点にいるとき, スイッチを押すことで高橋君が移動できる辺の色が入れ替わる (青から赤へ, 赤から青へ).
頂点 から適切な方法で頂点を移動し, スイッチを押すことで頂点 に到達することは可能か? 可能ならば頂点の移動回数の最小値を求めよ.
制約
- は単純無向グラフ
- は または
解法
高橋君の状況としては今いる頂点と通れる辺の色という 通りの状態がありうる.
この 個の状態に対して, で頂点 におり, 通れる辺の色が赤である状態, で頂点 におり, 通れる辺の色が青である状態を表す.
この 個の状態を頂点とし, 次のように重み付きの辺を張ったグラフを とする.
- に対して, 長さ の辺 を張る.
- にスイッチがある場合, 長さ の辺 を張る.
上の辺は移動すること, 下の辺はスイッチを押すことに対応する.
最初の状態は であることから, において, から のうち少なくとも一方が到達可能であるか? そうであるならば距離の最小値が答えになる.
辺の重みが か なので, BFS におけるキューへの出し入れを工夫した 01-BFS を利用することによって計算量 時間で計算できる.