求大佬指点一下
#include<bits/stdc++.h>
using namespace std;
vector<int> e[100001];
int f[100001], v[100001], q, n, sum, num, size[100001], ff[100001], c[100001], w[10001][10001];
void dfs(int x, int fa) {
size[x] = c[x];
for(int i = 0; i < e[x].size(); i ++) {
int son = e[x][i];
if(son == fa)
continue;
dfs(son, x);
size[x] += size[son];
}
}
void dfs1(int x, int fa) {
for(int i = 0; i < e[x].size(); i ++) {
int son = e[x][i];
if(son == fa)
continue;
ff[son] = ff[x] + w[son][x];
dfs1(son, x);
}
sum += ff[x] * c[x];
}
void dp(int x, int fa) {
for(int i = 0; i < e[x].size(); i ++) {
int son = e[x][i];
if(son == fa)
continue;
v[son] = 1;
f[son] = f[x] + (num - 2 * size[son]) * w[son][x];
dp(son, x);
}
}
int main() {
cin >> n;
memset(f, 0X7f, sizeof(f));
for(int i = 1; i <= n; i ++) {
cin >> c[i];
num += c[i];
}
for(int i = 1; i < n; i ++) {
int a, b, c;
cin >> a >> b >> c;
e[a].push_back(b);
e[b].push_back(a);
w[a][b] = c;
w[b][a] = c;
}
dfs(1, -1);
dfs1(1, -1);
f[1] = sum;
dp(1, -1);
int ans = sum, ans1;
for(int i = 1; i <= n; i ++)
ans = min(ans, f[i]);
cout << ans << endl;
return 0;
}