#include<bits/stdc++.h>
using namespace std ; struct no { int u,v,w; }eg[200001]; int fa[100001],val[100001]; bool cmp(no a , no b) { return a.w<b.w; } int find(int u) { if(fa[u]==u)return u; return fa[u]=find(fa[u]); } int main() { int n,m; scanf("%d%d",&n,&m); for(int i=1 ; i<=m ; i++) { int a,b,c; scanf("%d%d%d",&eg[i].u , &eg[i].v , &eg[i].w); } for(int i=1 ; i<=n ; i++) { scanf("%d",&val[i]); if(val[i]!=-1) { eg[++m].u=0; eg[m].v=i; eg[m].w=val[i]; } } for(int i=1 ; i<=n ; i++) fa[i]=i; sort(eg+1,eg+1+m,cmp); int ans=0,W=0,IDcost; for(int i=1 ; i<=m ; i++) { int u=eg[i].u , v=eg[i].v , w=eg[i].w; int x=find(u) , y=find(v); if((x!=y) || w<0) { fa[x]=y; ans+=w; if(u==0) { W++; IDcost=w; } } } if(W==1)///只是建一個碼頭是
ans-=IDcost; printf("%d\n",ans); }