Pagini recente » Cod sursa (job #3287160) | Cod sursa (job #2604899) | Cod sursa (job #2207243) | Cod sursa (job #1395260) | Cod sursa (job #2206922)
#include <bits/stdc++.h>
using namespace std;
ifstream in("asmax.in");
ofstream out("asmax.out");
const int N_MAX = 16000, INF = 2e9;
int n;
int val[N_MAX + 2];
vector<int> gr[N_MAX + 2];
int ans;
int sum[N_MAX + 2];
void dfs(int node, int daddy)
{
sum[node] = val[node];
for(auto it: gr[node])
if(it != daddy)
{
dfs(it, node);
if(sum[it] > 0)
sum[node] += sum[it];
}
}
int main()
{
in >> n;
for(int i = 1; i <= n; i++)
in >> val[i];
for(int i = 1; i <= n - 1; i++)
{
int x, y;
in >> x >> y;
gr[x].push_back(y);
gr[y].push_back(x);
}
dfs(1, 0);
ans = -INF;
for(int i = 1; i <= n; i++)
ans = max(ans, sum[i]);
out << ans << '\n';
return 0;
}