标签:
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<stdio.h> #include<string.h> #include<math.h> #define M 1000000 int eg[505][505],vid[10000];//刚开始数组开的太小了出现runtimeerror int a[1000],b[1000],p[1000]; int n,m,min1; void prim() { int k,r; int min; memset(p,0,sizeof(p)); for(int i=1;i<=n;i++) vid[i]=eg[1][i]; p[1]=1;vid[1]=0; for(int i=2;i<=n;i++) { min=M; k=1; for(int j=1;j<=n;j++) if(!p[j]&&vid[j]<min) { min=vid[j]; k=j; } p[k]=1; for(int t=1;t<=n;t++) if(!p[t]&&vid[t]>eg[k][t]) vid[t]=eg[k][t]; } int sum=0; for(int i=2;i<=n;i++) sum+=vid[i]; printf("%d\n",sum+min1); } int main() { int t; scanf("%d",&t); while(t--) { scanf("%d",&n); int i,j,k; scanf("%d",&m); int q,o,v; memset(eg,M,sizeof(eg)); for(i=1;i<=m;i++) { scanf("%d%d%d",&q,&o,&v); eg[o][q]=eg[q][o]=v; } int f; min1=100000; for(i=0;i<n;i++) { scanf("%d",&f); if(min1>f) min1=f; } memset(vid,0,sizeof(vid)); prim(); } return 0; }
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/l15738519366/article/details/47746901