原题链接:点击打开
prim算法。。。没啥说的。。
代码:
#include<stdio.h>
#include<string.h>
int main()
{
int a,b,n,n1,m,k,i,j,min;
scanf("%d",&k);
while(k--)
{
int ok[505][505],ac[505]={0},yi[505];
int c1,c2,c3;
int sum=0;
memset(ok,9999,sizeof(ok));
memset(yi,9999,sizeof(yi));
memset(ac,0,sizeof(ac));
scanf("%d%d",&n,&m);
while(m--)
{
scanf("%d%d%d",&c1,&c2,&c3);
ok[c1][c2]=c3;
ok[c2][c1]=c3;
}
n1=n-1;
a=1;
ac[1]=1;
while(n1--)
{
min=100000;
for(b=1;b<=n;b++)
{
if(a!=b)
{
if(ok[a][b]<yi[b]&&ac[b]==0)
yi[b]=ok[a][b];
}
}
for(i=2;i<=n;i++)
if(min>yi[i]&&ac[i]==0)
{min=yi[i];j=i;}
ac[j]=1;
a=j;
sum+=yi[j];
}
min=99999;
for(a=1;a<=n;a++)
{
scanf("%d",&b);
if(min>b)
min=b;
}
printf("%d\n",sum+min);
}
}