#include<bits/stdc++.h>
using namespace std;
int n;
const int N=1e5+10;
int c[N];
int sum=0;
int ans;
vector<pair<int,int> > edge[N];
int f[N],dis[N],size[N],g[N];
void dfs(int t,int fa){
size[t]=c[t];
dis[t]+=dis[fa];
g[t]=c[t]*dis[t];
for (int i=0;i<edge[t].size();i++){
if(edge[t][i].first!=fa){
dis[edge[t][i].first]=edge[t][i].second;
dfs(edge[t][i].first,t);
size[t]+=size[edge[t][i].first];
}
}
}
void dfs1(int t,int fa){
for (int i=0;i<edge[t].size();i++){
if(edge[t][i].first!=fa){
f[edge[t][i].first]=f[t]-sum*(dis[edge[t][i].first]-dis[t])+2*size[edge[t][i].first]*(dis[edge[t][i].first]-dis[t]);
ans=min(ans,f[edge[t][i].first]);
dfs1(edge[t][i].first,t);
}
}
}
int main(){
scanf("%d",&n);
for (int i=1;i<=n;i++){
scanf("%d",&c[i]);
sum+=c[i];
}
for (int i=1;i<n;i++){
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
edge[u].push_back(make_pair(v,w));
edge[v].push_back(make_pair(u,w));
}
g[1]=0;
dis[1]=0;
dfs(1,0);
for (int i=1;i<=n;i++){
f[1]+=g[i];
}
ans=f[1];
dfs1(1,0);
cout<<ans;
}