比赛 防止浮躁的小练习V0.1 评测结果 AAAAAAAAAA
题目名称 通信线路 最终得分 100
用户昵称 森林 运行时间 1.350 s
代码语言 C++ 内存使用 96.06 MiB
提交时间 2016-10-07 16:40:22
显示代码纯文本
#include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<ctime>
#include<algorithm>
#include<stack>
#include<queue>
#include<vector>
#include<functional>
using namespace std;
#define maxn 5010
#define ma 0x7f7f7f7f
int asa[maxn][maxn];
int Prim(int G[maxn][maxn],int v,int sta){
	int mst=0,lowcost[maxn];
	memset(lowcost,0x7f,sizeof(lowcost));
	bool used[maxn]={0};
	for(int i=0;i<v;i++)
	lowcost[i]=G[sta][i];
	used[sta]=1;
	for(int i=1;i<=v-1;i++){/*zhaon-1bain*/
		int j=0,min=ma;
		for(int k=0;k<v;k++)
			if(!used[k]&&lowcost[k]<min){
				min=lowcost[k];
				j=k;
			}
		used[j]=1;
		mst+=min;
		for(int k=0;k<v;k++)
		if(!used[k]&&G[j][k]<lowcost[k])
		lowcost[k]=G[j][k];
	}
	return mst;
}
int main(){
	freopen("mcst.in","r",stdin);
	freopen("mcst.out","w",stdout);
	memset(asa,0x7f,sizeof(asa));
	int n;scanf("%d",&n);
	for(int i=0;i<n;i++)
	for(int j=0;j<n;j++){
		int a;
		scanf("%d",&a);
		if(a==-1)continue;
		asa[i][j]=a;
	}
	int k=Prim(asa,n,0);
	printf("%d",k);
	return 0;
}/**/