問題はこちら
問題概要
頂点の完全無向グラフから辺取り除く.このグラフの頂点から本の辺を辿るパス(一つの辺を複数回辿ってもいい)のうち終点が頂点であるようなパスの数を求めよ.解説
頂点から頂点への長さのパス(厳密にはwalk)の数は,グラフの隣接行列を乗した行列の成分と一致する.ja.wikipedia.org
これを用いると今回の問題では,グラフの隣接行列を乗した行列の成分が求めるものとなる.このまま適用すると,隣接行列はの行列なのでかかって間に合わない.
補グラフの隣接行列を見ると個の非零成分のみからなる疎行列になっている(この行列をとする).また,全成分がの行列を,単位行列をとすると,元のグラフの隣接行列はと表される.
したがって,の成分が答えとなる.第成分のみであり,他の成分がであるような列ベクトルを用いるとと書ける.
分かりづらいと思うので例(入力例3)
入力例3において
グラフの隣接行列
補グラフの隣接行列
求めるものは
を計算する代わりに右から順にを計算していく.
はの全ての行が同じなのでで計算できる.
はの非零成分が個なので,で計算できる(詳しくは下の実装).
よって,はで計算できる.これを回繰り返すのでで解ける.
和を取っていくつか引いてるだけなので本質的には公式解説と同じ.