#include<stdio.h> #include<stdlib.h> #define inf 0x3fffffff #define N 600 struct node { int x,y,w; }ma[N*N]; int cmp(const void *a,const void *b) { return (*(struct node *)a).w-(*(struct node *)b).w; } int pre[N]; int find(int x) { if(x!=pre[x]) pre[x]=find(pre[x]); return pre[x]; } int main() { int t,n,m,i,j,k,aa,bb; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); for(i=0;i<m;i++) scanf("%d%d%d",&ma[i].x,&ma[i].y,&ma[i].w); qsort(ma,m,sizeof(ma[0]),cmp); k=0; for(i=1;i<=n;i++) pre[i]=i; for(i=0;i<m;i++) { aa=find(ma[i].x); bb=find(ma[i].y); if(aa!=bb) { pre[aa]=bb; k+=ma[i].w; } } j=inf; for(i=0;i<n;i++) { scanf("%d",&m); if(m<j) j=m; } printf("%d ",j+k); } return 0; }