解説
DP の遷移は行列として表すことができ、行列累乗によって解くことができます。
このとき、通常の行列とは違い、和を max 、積を + として定義します。これは半環になるため行列の形で計算できます。
時刻 t のときの頂点 v のスコアを Stv とすると、遷移行列 A を使って次のように表すことができます。
St1 St2 ⋮ StN=AtS01 S02 ⋮ S0N
初期値は
S01=1,S0v=−∞(2≤v≤N)
となります。
遷移行列 A は以下のように定義されます。
Aii=0 : これは時間が経った時同じ頂点にとどまってもいいからです。
ABiAi=Ci : これは辺による移動です。
答えは STN となるため、 O(N3logT) で解くことができました。
……行列累乗するには少し N が大きすぎたので、反省です。