46

来源:互联网 发布:thinkpad x系列 知乎 编辑:程序博客网 时间:2024/04/29 07:09
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;#define MAXN  0x7fffffffint a[505];int  graph[505][505];int lowcost[505];int visited[505];int v;int prim(){   int  sum=0;    memset(visited,0,sizeof(visited));    visited[1]=1;    for(int i=2;i<=v;i++)        lowcost[i]=graph[1][i];    for(int j=2;j<=v;j++){            int mi=MAXN,minid=0;        for(int i=2;i<=v;i++)            if(lowcost[i]<mi&&visited[i]!=1){                mi=lowcost[i];                minid=i;            }    visited[minid]=1;    sum+=mi;    for(int i=1;i<=v;i++){        if(graph[minid][i]<lowcost[i])             lowcost[i]=graph[i][minid];    }}return sum;}int main(){    int n,x,y,e,cost;    scanf("%d",&n);    while(n--){        scanf("%d%d",&v,&e);        for(int i=1;i<=v;i++)            for(int j=1;j<=v;j++)                graph[i][j]=MAXN;        for(int i=1;i<=e;i++){            scanf("%d%d%d",&x,&y,&cost);            graph[x][y]=cost;            graph[y][x]=cost;        }        for(int i=1;i<=v;i++)                 scanf("%d",&a[i]);        sort(a+1,a+v+1);        printf("%d\n",prim()+a[1]);}}

0 0