AtCoder Beginner Contest 244 F問題 Shortest Good Path
問題
提出解答
問題の概要
頂点 辺の単純無向連結グラフ が与えられる.
からなる長さ の列に対して, 以下を満たすような列 のうち, の最小値を と書くことにする.
- ならば, の中に が偶数回登場する.
- ならば, の中に が奇数回登場する.
考えられる 通りの 全てにおける の総和を求めよ.
ただし, 任意の に対して, 上の条件を満たす は必ず存在する.
制約
- は単純無向連結グラフ
解法
からなる長さ の列 と, 以上 以下の整数 に対して, で の 番目の要素の を入れ替えた列とする.
ここで, 次のような無向グラフ を考える.
このとき, における から へのパス について, というパスが には存在し, しかもこのパスにおける各頂点の登場回数が になる.
逆に, 空でないパスに対して, 上のようにして, を始点, を終点とし, 状態が であるようなパスを求めることができる.
また, 空のパスにおいては明らかに となる.
以上から, に対して,
となることがわかる.
ここで, 各 を固定したとき, は多点始点 BFS によって求める事ができる.
多点始点 BFS を使うので, 無向グラフ の位数とサイズを求める.
- 位数:
- サイズ:
である. よって, 多点始点 BFS を時間計算量 で実行でき,
が解答になる.