Pagini recente » Cod sursa (job #2671198) | Cod sursa (job #1717732) | Cod sursa (job #1061853) | Cod sursa (job #1911394) | Cod sursa (job #2460357)
#include<cstdio>
#include<vector>
#include<algorithm>
const int NMAX = 16000;
int v[NMAX + 1];
std :: vector <int> m[NMAX + 1];
int dp[NMAX + 1];
void dfs(int nod , int t)
{
for(int poz = 0; poz < m[nod].size() ; poz ++)
{
if(m[nod][poz] != t)
{
dfs(m[nod][poz] , nod);
if(dp[m[nod][poz]] > 0)
dp[nod] += dp[m[nod][poz]];
}
}
}
int main()
{
freopen("asmax.in" , "r" , stdin);
freopen("asmax.out" , "w" , stdout);
int n;
scanf("%d" , &n);
for(int i = 1; i <= n ; i ++)
scanf("%d" , &dp[i]);
int x , y;
for(int i = 1; i < n ; i ++)
{
scanf("%d%d" , &x , &y);
m[x].push_back(y);
m[y].push_back(x);
}
dfs(1 , 0);
int sol = -2000000000;
for(int i = 1 ; i <= n ; i ++)
sol =std :: max(sol , dp[i]);
printf("%d" , sol);
return 0;
}