Pagini recente » Cod sursa (job #433607) | Cod sursa (job #2301758) | Cod sursa (job #993297) | Cod sursa (job #264754) | Cod sursa (job #1912781)
#include <iostream>
#include <cstdio>
#include <vector>
#include <bitset>
#define N 16005
using namespace std;
int n, cost[N], cost_actual, maxim = -16000001;
vector <int> G[N];
bitset <N> viz;
void dfs(int nod)
{
viz[nod] = true;
cost_actual += cost[nod];
if(cost_actual > maxim)
{
maxim = cost_actual;
}
else
{
cost_actual -= cost[nod];
}
vector <int>::iterator it;
for(it = G[nod].begin() ; it != G[nod].end() ; ++it)
{
if(!viz[*it])
{
dfs(*it);
}
}
}
void citire()
{
scanf("%d\n",&n);
for(int i = 1 ; i <= n ; ++i)
{
scanf("%d ",&cost[i]);
}
scanf("\n");
int a, b;
for(int i = 1 ; i < n ; ++i)
{
scanf("%d %d\n",&a,&b);
G[a].push_back(b);
G[b].push_back(a);
}
dfs(1);
printf("%d",maxim);
}
int main()
{
freopen("asmax.in","r",stdin);
freopen("asmax.out","w",stdout);
citire();
return 0;
}