添加链接描述
code
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll N = 1e5+5;
const ll INF = 1e18;
ll n, val[N], sum[N], mx[N], ans = -INF;
vector<ll> vec[N];
void dfs(ll x, ll fa)
{
ll maxn = -INF;
sum[x] = val[x];
for(ll i = 0; i < vec[x].size(); i++)
{
ll y = vec[x][i];
if(y == fa) continue;
dfs(y, x);
sum[x] += sum[y];
if(maxn != -INF)
ans = max(ans, maxn + mx[y]);
maxn = max(maxn, mx[y]);
}
mx[x] = max(maxn, sum[x]);
}
int main()
{
cin >> n;
for(ll i = 1; i <= n; i++)
cin >> val[i];
for(ll i = 1; i < n; i++)
{
ll u, v;
cin >> u >> v;
vec[u].push_back(v);
vec[v].push_back(u);
}
dfs(1, 0);
if (ans == -INF)
printf("Error\n");
else
printf("%lld\n", ans);
return 0;
}