比赛 防止浮躁的小练习V0.1 评测结果 AAAAAAAAAA
题目名称 通信线路 最终得分 100
用户昵称 浮生随想 运行时间 0.497 s
代码语言 C++ 内存使用 8.95 MiB
提交时间 2016-10-07 16:48:18
显示代码纯文本
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
int Prim(int);
int const maxn=1505;
int n,G[maxn][maxn],m;
int main()
{
	freopen("mcst.in","r",stdin);
	freopen("mcst.out","w",stdout);
	memset(G,0x7f,sizeof(G));
	scanf("%d",&n);
	for(int i=1;i<=n;i++)for(int j=1;j<=n;j++){
		int x;
		scanf("%d",&x);if(x!=-1)G[i][j]=x;
	}
	int k=Prim(n);
	if(k==0x7f7f7f7f)	printf("-1");
	else printf("%d",k);
}
int Prim(int v) 
{
	int i,j,k,min,mst=0,lowcost[maxn],used[maxn];
	for(i=1;i<=v;i++)
	{
		lowcost[i]=G[1][i];
		used[i]=0;
	}
	used[1]=1;
	for(i=1;i<v;i++)
	{
		j=0;min=0x7fffffff; 
		for(k=1;k<=v;k++)
		if(!used[k]&&lowcost[k]<min)
		{
			min=lowcost[k];j=k;
		}
		used[j]=1;
		mst+=min;
		for(k=1;k<=v;k++)
		{
			if(!used[k]&&(G[j][k]<lowcost[k]))
			{
			lowcost[k]=G[j][k];
			}
		}
	}
	return mst;
}