#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
long long n,c[maxn],f[maxn],size[maxn],h[maxn],g[maxn],sum,cnt;
struct road{
int a;
int b;
int l;
}r[maxn*2];
void add(int a,int b,int l){
r[++cnt].a=b;
r[cnt].l=l;
r[cnt].b=h[a];
h[a]=cnt;
}
void dfs1(int u,int fa){
int v=0;
size[u]=c[u];
for(int i=h[u];i;i=r[i].b){
v=r[i].a;
if(v==fa){
continue;
}
dfs1(v,u);
size[u]+=size[v];
f[u]+=f[v]+size[v]*r[i].l;
}
}
void dfs2(int u,int fa){
int v=0;
for(int i=h[u];i;i=r[i].b){
v=r[i].a;
if(v!=fa){
continue;
}
g[u]=f[v]-f[u]-(size[u]*r[i].l)+g[v]+(sum-size[u])*r[i].l;
for(int i=h[u];i;i=r[i].b){
if(r[i].a!=fa){
dfs2(r[i].a,u);
}
}
}
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>c[i];
sum+=c[i];
}
int a1,b1,l1;
for(int i=1;i<n;i++){
cin>>a1>>b1>>l1;
add(a1,b1,l1);
add(b1,a1,l1);
}
dfs1(1,0);
dfs2(1,0);
long long ans=0x3f;
for(int i=1;i<=n;i++){
ans=min(ans,f[i]+g[i]);
}
cout<<ans;
}