Pagini recente » Cod sursa (job #1917564) | Cod sursa (job #2580092) | Cod sursa (job #2465048) | Cod sursa (job #1583853) | Cod sursa (job #2056085)
#include <bits/stdc++.h>
#define dbg(x) cerr<<#x": "<<x<<"\n"
#define dbg_v(x, n) do{cerr<<#x"[]: ";for(int _=0;_<n;++_)cerr<<x[_]<<" ";cerr<<'\n';}while(0)
#define dbg_ok cerr<<"OK!\n"
#define DMAX 16100
#define NMAX 1
#define MMAX 1
using namespace std;
int n, x, k, val[DMAX], use[DMAX], m, dp[DMAX], a, b;
string s;
vector<int> v[DMAX];
void dfs(int node)
{
use[node] = 1;
dp[node] = val[node];
for(int i = 0; i < v[node].size(); i++)
{
if(!use[v[node][i]])
{
dfs(v[node][i]);
dp[node] += dp[v[node][i]];
}
}
if(dp[node] < 0)
dp[node] = 0;
}
int main()
{
ios_base::sync_with_stdio(false);
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
cin >> n;
for (int i = 1; i <= n; ++i)
{
cin >> val[i];
}
for (int i = 1; i < n; ++i)
{
cin >> a >> b;
v[a].push_back(b);
v[b].push_back(a);
}
dfs(1);
//dbg_v(dp, n + 1);
int smax = -100000000;
for(int i = 1; i <= n; i++)
if(dp[i] > smax)
smax = dp[i];
cout << smax << '\n';
}