比赛 练习12 评测结果 AAAAAAAAAA
题目名称 新的开始 最终得分 100
用户昵称 NVIDIA 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2017-06-30 13:09:55
显示代码纯文本
//prim 这里面fread应该比传统快读快一点,不过数据水看不出来 
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<iostream>
#define M 1e17+5
using namespace std;
int dist[310],cost[310][310],n,ans;
bool b[310];
char buf[1<<15],*fs,*ft;
inline char getc() {return (fs==ft&&(ft=(fs=buf)+fread(buf,1,1<<15,stdin),fs==ft))?0:*fs++;}
inline int q()
{
    int x=0,f=1; char ch=getc();
    while(!isdigit(ch)){if(ch=='-')f=-1;ch=getc();}
    while(isdigit(ch)){x=x*10+ch-'0';ch=getc();}return x*f;
}
inline int WORK()
{
	int min,i,j,s;
	for(i=1;i<=n;i++) dist[i]=cost[1][i];
	b[1]=1;
	for(j=1;j<n;j++){
		min=M;
		for(i=1;i<=n;i++)
		  if(!b[i]&&min>dist[i])
		    min=dist[i],s=i;
		b[s]=1,ans+=dist[s];
		for(i=1;i<=n;i++)
		  if(!b[i]&&dist[i]>cost[s][i])
		    dist[i]=cost[s][i];
	}
}
inline int DO()
{
	freopen("newstart.in","r",stdin);
	freopen("newstart.out","w",stdout);
	int i,j,a;
	n=q();
	for(i=1;i<=n;i++)
	{
		a=q();
		cost[i][n+1]=cost[n+1][i]=a;
	}
	for(i=1;i<=n;i++){
		for(j=1;j<=n;j++){
			a=q();
			cost[i][j]=cost[j][i]=a;
		}
	}
	n++,WORK();
	printf("%d\n",ans);
	return 0;
}
int aa=DO();
int main(){;}