Pagini recente » Cod sursa (job #2016982) | Cod sursa (job #2048424) | Cod sursa (job #1920844) | Cod sursa (job #2047848) | Cod sursa (job #2050456)
#include <iostream>
#include <cstdio>
#include <vector>
#define NMAX 16005
using namespace std;
int n, v[NMAX], viz[NMAX], suma[NMAX], start = 1;
vector <int> g[NMAX];
void read()
{
scanf("%d", &n);
for(int i=1; i<=n; ++i)
{
scanf("%d", &v[i]);
}
for(int i=1; i<=n-1; ++i)
{
int x, y;
scanf("%d%d", &x, &y);
g[x].push_back(y);
g[y].push_back(x);
}
}
int dfs(int node)
{
vector <int>::iterator it;
viz[node] = 1;
for(it = g[node].begin(); it != g[node].end(); ++it)
if(viz[*it] == 0)
{
suma[node] += dfs(*it);
}
suma[node] += v[node];
if(suma[node] > 0)
return suma[node];
return 0;
}
int main()
{
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
read();
dfs(1);
for(int i=1; i<=n; ++i)
suma[1] = max(suma[1], suma[i]);
printf("%d", suma[1]);
return 0;
}