题解 CF25C 【Roads in Berland】
Codeforces
luogu
其实前一篇题解讲得很清楚了(发自内心)
每次插边更新一次
最后/=2
这里补充Floyd的基础知识,这篇目测可以(会最短路的可以忽略)
开long long保险好
#include<bits/stdc++.h>
using namespace std;
long long n,k,dist[1010][1010],ans;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>dist[i][j];
ans+=dist[i][j];
}
}
cin>>k;
int a,b,c;
for(int js=1;js<=k;js++)
{
cin>>a>>b>>c;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(dist[i][a]+dist[b][j]+c<dist[i][j])
{
ans-=dist[i][j]-(dist[i][a]+dist[b][j]+c);
dist[i][j]=dist[i][a]+dist[b][j]+c;
}
if(dist[i][b]+dist[a][j]+c<dist[i][j])
{
ans-=dist[i][j]-(dist[i][b]+dist[a][j]+c);
dist[i][j]=dist[i][b]+dist[a][j]+c;
}
}
}
cout<<ans/2<< " ";
}
}