#include<algorithm>
#include<iostream>
#include<cstring>
#include<string>
#include<cstdio>
#include<vector>
#include<cmath>
#include<ctime>
#include<stack>
#include<queue>
#include<map>
#define ull unsigned long long
using namespace std;
long long n,a,b,d,c[200005],lc[400005];
long long ans;
long long cnt,head[200005];
long long ji[400005];
struct node{
long long to,net,dis;
}bian[400005];
void add(long long x,long long y,long long z){
cnt++;
bian[cnt].to=y;
bian[cnt].net=head[x];
head[x]=cnt;
bian[cnt].dis=z;
}
void init(long long now,long long fa,long long lu){
if(lc[lu]!=0&&lu!=0){
return;
}
for(int i=head[now];i;i=bian[i].net){
if(i==0) continue;
if(bian[i].to!=fa){
init(bian[i].to,now,i);
lc[lu]+=lc[i];
}
}
lc[lu]+=c[now];
}
long long dfs(long long now,long long fa,long long lu){
if(lu&&ji[lu]) return ji[lu];
long long sum=0;
for(int i=head[now];i;i=bian[i].net){
if(i==0) continue;
long long y=bian[i].to;
long long z=bian[i].dis;
if(y!=fa){
sum+=dfs(y,now,i);
sum+=lc[i]*z;
}
}
ji[lu]=sum;
return sum;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>c[i];
}
for(int i=1;i<n;i++){
cin>>a>>b>>d;
add(a,b,d);
add(b,a,d);
}
for(long long i=1;i<=n;i++) init(i,i,0);
for(long long i=1;i<=n;i++){
long long minn=dfs(i,i,0);
if(i!=1) ans=min(ans,minn);
else ans=minn;
}
cout<<ans;
return 0;
}