刷题记录表

No.8

2020-04-17

【题目】【高手训练】【图论】最小花费

【思路】

省略……

【代码】

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define INF 0x3f3f3f3f
inline int read(int &a){a=0;int f=1;char c=getchar();if(c==EOF) return a=EOF;
for(;c<'0' || c>'9';c=getchar()){if(c=='-') f=-1;if(c==EOF) return a=EOF;}
for(;c<='9' && c>='0';a=a*10+c-'0',c=getchar());return a*=f;}
int n;
int c[2010][2010];
int f[2010],bj[2010];
ll ans;

int main()
{
	read(n);
	for(int i=1;i<=n;i++)
	for(int j=i;j<=n;j++)
	read(c[i-1][j]),c[j][i-1]=c[i-1][j];
	f[0]=0;
	for(int i=1;i<=n;i++) f[i]=c[0][i];
	for(int i=1;i<=n;i++)
	{
		int sum=INF,k;
		for(int j=1;j<=n;j++)
		if(!bj[j] && f[j]<sum)
		sum=f[j],k=j;
		bj[k]=1,ans+=sum;
		for(int j=1;j<=n;j++)
		if(!bj[j] && f[j]>c[k][j])
		f[j]=c[k][j];
	}
	printf("%lld\n",ans);
	return 0;
}

留下评论

通过 WordPress.com 设计一个这样的站点
从这里开始