http://acm.nyist.net/JudgeOnline/problem.php?pid=38
#include <stdio.h>
#include <memory.h>
#define M 610
int g[M][M],dist[M];
int main()
{
int t,i,j,k,v,e,a,b,c,min,ans;
scanf("%d",&t);
while(t--)
{
memset(g,-1,sizeof(g));
scanf("%d%d",&v,&e);
for(i=1;i<=v;i++)
{
dist[i]=11000;
}
ans=0;
dist[1]=0; // 任意选一个顶点作为生成树的根节点
// 每次把一个顶点加到生成树中 所用的花费都是最少的
for(i=1;i<=e;i++)
{
scanf("%d%d%d",&a,&b,&c);
g[a][b]=c;
g[b][a]=c;
if(a==1)
{
dist[b]=c;
}
if(b==1)
{
dist[a]=c;
}
}
min=9999;
for(i=1;i<=v;i++)
{
scanf("%d",&k);
if(min>k)
{
min=k;