ワーシャルフロイド法
基本実装
code:cpp
vector<vector<ll>>d(n,vector<ll>(n,INF));
rep(k,0,n)rep(i,0,n)rep(j,0,n)chmin(d
i
j
,d
i
k
+d
k
j
);
応用
辺を後から追加
https://atcoder.jp/contests/abc416/tasks/abc416_e
の "クエリ1"がその例。
https://atcoder.jp/contests/abc416/submissions/67907499
に実装例あり。(この実装例では、仮想の頂点を1個追加している関係でn+1回ループを回している。下のコードスニペットは頂点数nとして書き直した)
code:cpp
// 頂点x, yの間にコストtの辺を新たに張る
rep(i,0,n)rep(j,0,n){
chmin(d
i
j
,d
i
x
+t+d
y
j
);
chmin(d
i
j
,d
i
y
+t+d
x
j
);
}