Pagini recente » Cod sursa (job #2174614) | Cod sursa (job #229432) | Cod sursa (job #2482215) | Istoria paginii runda/pre_oji_2011 | Cod sursa (job #1744743)
#include <bits/stdc++.h>
#define Nmax 16003
#define pb(x) push_back(x)
#define Max(x, y) x > y ? x : y
FILE *fin = freopen("asmax.in", "r", stdin);
FILE *fout = freopen("asmax.out", "w", stdout);
using namespace std;
int n, dp[Nmax], sol;
vector <int> G[Nmax];
bitset <Nmax> vis;
void read()
{
int i, x, y;
scanf("%d", &n);
for(i = 1; i <= n; ++ i)
scanf("%d", &dp[i]);
for(i = 1; i < n; ++ i)
{
scanf("%d %d", &x, &y);
G[x].pb(y);
G[y].pb(x);
}
}
void DFS(int x)
{
vis.set(x);
for(int i = 0; i < G[x].size(); ++ i)
{
int y = G[x][i];
if(vis.test(y) == 0)
{
DFS(y);
if(dp[y] > 0)
dp[x] += dp[y];
}
}
sol = Max(sol, dp[x]);
}
void write()
{
printf("%d\n", sol);
}
int main()
{
read();
DFS(1);
write();
return 0;
}