#include <iostream>
#include <vector>
#include <cstring>
#include <stdio.h>
using namespace std;
struct Com{
int x,y;
Com(int _x,int _y){
x=_x;
y=_y;
}
};
vector <Com> vec[10005];
int value[10005];
int minvalue[10005];
int dfs(int x){
//cout<<"========"<<x<<' '<<minvalue[x]<<endl;
if(minvalue[x]!=-1)
return minvalue[x];
minvalue[x] = value[x];
for(int i=0 ; i<vec[x].size();i++){
int tmpx,tmpy;
if(minvalue[ vec[x][i].x ]!=-1 )
tmpx=minvalue[ vec[x][i].x ];
else
minvalue[ vec[x][i].x ] = dfs(vec[x][i].x) , tmpx = minvalue[ vec[x][i].x ];
if(minvalue[ vec[x][i].y ]!=-1 )
tmpy=minvalue[ vec[x][i].y ];
else
minvalue[ vec[x][i].y ] = dfs(vec[x][i].y) , tmpy = minvalue[ vec[x][i].y ];
minvalue[x] = min(minvalue[x] , tmpx+tmpy);
}
//cout<<x<<":"<<minvalue[x]<<endl;
return minvalue[x];
}
int main()
{
int m,n;
int tmp,x,y;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
scanf("%d",&value[i]);
for(int i=0;i<m;i++){
scanf("%d%d%d",&tmp,&x,&y);
vec[tmp].push_back(Com(x,y));
}
//cout<<vec[1][0].x<<' '<<vec[1][0].y<<' '<<endl;
// cout<<vec[4][0].x<<' '<<vec[4][0].y<<' '<<endl;
// cout<<vec[5][0].x<<' '<<vec[5][0].y<<' '<<endl;
memset(minvalue,-1,sizeof(minvalue));
printf("%d",dfs(1));
return 0;
}
浙公网安备 33010602011771号