1 4 6 1 2 10 2 3 10 3 1 10 1 4 1 2 4 1 3 4 1 1 3 5 6
4
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define inf 0x3f3f3f3f
using namespace std;
int low[510],map[510][510],vis[510],v;
int prime(){
int min,pos,i,j,k,result=0;
memset(vis,0,sizeof(vis));
pos=1;vis[1]=1;
for(i=1;i<=v;++i){
if(i!=pos)low[i]=map[pos][i];
}
for(j=1;j<v;++j){
min=inf;
for(i=1;i<=v;++i){
if(!vis[i]&&min>low[i]){
min=low[i];pos=i;
}
}
result+=min;vis[pos]=1;
for(i=1;i<=v;++i){
if(!vis[i]&&low[i]>map[pos][i])
low[i]=map[pos][i];
}
}
return result;
}
int main()
{
int n,k,i,j,a,b,min,e,c;
scanf("%d",&k);
while(k--){
memset(map,0x3f,sizeof(map));
scanf("%d%d",&v,&e);
while(e--){
scanf("%d%d%d",&a,&b,&c);
map[a][b]=map[b][a]=c;
}
min=inf;
for(i=0;i<v;++i){
scanf("%d",&a);
if(a<min)min=a;
}
min=min+prime();
printf("%d\n",min);
}
return 0;
}
原文:http://blog.csdn.net/r1986799047/article/details/42836777