比赛 |
练习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(){;}