#include<bits/stdc++.h>
using namespace std;
long long dp[100005], minn = 1e18;
int n, c[1005], u, v, w, siz[100005];
vector< pair<int, int> > d[100005];
void dfs(int x, int fa){
siz[x] = c[x];
for(int i = 0; i < d[x].size(); ++i){
int y = d[x][i].first, val = d[x][i].second;
if(y == fa) continue;
dfs(y, x);
siz[x] += siz[y];
dp[x] += dp[y] + siz[y] * val;
}
}
void dfs2(int x, int fa){
for(int i = 0; i < d[x].size(); ++i){
int y = d[x][i].first, val = d[x][i].second;
if(y == fa) continue;
dp[y] = dp[x] - siz[y] * val + (siz[1] - siz[y]) * val;
dfs2(y, x);
}
}
int main(){
scanf("%d", &n);
for(int i = 1; i <= n; ++i){
scanf("%d", &c[i]);
}
for(int i = 1; i < n; ++i){
scanf("%d%d%d", &u, &v, &w);
d[u].push_back(make_pair(v, w));
d[v].push_back(make_pair(u, w));
}
dfs(1, 0);
dfs2(1, 0);
for(int i = 1; i <= n; ++i) minn = min(minn, dp[i]);
printf("%lld\n", minn);
}
lz 晚点回复,感谢!