きままにものづくり

日々の気付いたことなんかを書いてます。

SRM622Div1Easy

問題

N個( N \leq 50)の頂点を持ち、dist[i][j]( 0 \leq i,j < N)のコストの一方向の辺を持つグラフが与えられる。それぞれの頂点からそれぞれの頂点への最短路を考えた時、T( T \leq 2500)より多い回数を通る辺のコストの総和を求めよ。

解法

d[i][j]は最短路のコストを表す。ある辺が最短路に含まれるかどうかは、以下の式で判断できる。
 d[a][x] + dist[x][y] + d[y][b] = d[a][b]
上の条件を満たすのなら、xからyへの辺はaからbへの最短路に含まれる。全ての頂点に対して調べることで、それぞれの辺が最短路となる回数が求める。この回数がTより大きいかを調べることで答えが求まる。

計算量

 O(N^4)
N: 頂点数

コード