题解 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<< " ";
	}
}
posted @ 2019-02-12 21:46  G_A_TS  阅读(519)  评论(0编辑  收藏  举报