ABC021 C問題:正直者の高橋くん
解法1. 最短経路木
から各頂点 への最短距離を とする.このとき, の最短経路木 とは頂点集合が と等しく,弧集合が となる有向グラフのことである.また, は有向閉路が存在しない DAG なのでトポロジカルソート が存在する. 上の任意の最短経路は必ず の弧を通るので, を から への最短経路数と定義すると,
となる.
各頂点への最短距離は幅優先探索で 時間で求め( ),トポロジカルソートと漸化式 の更新は 上の入次数で行い 時間で求めた.
計算時間:
解法2. 隣接行列の冪乗
の隣接行列 とは, のとき , のとき で定義される行列のことである.任意の非負整数 に対して は頂点 から への長さ の歩道の数と等しい( による帰納法で示せる).ここで,歩道とは頂点の重複と辺の重複を許す道のことである.
が非零となる最小の と, から への最短距離は等しく,そのときの の値が から への最短経路数となる. から への最短距離は高々 なので,愚直に計算しても 時間で答えが求まる.
計算時間:
今回の問題の重み付き ver. は最短距離を求める部分で計算時間が異なるだけで本質的には同じ計算で答えが求まる.