Pagini recente » Cod sursa (job #2108000) | Cod sursa (job #892593) | Cod sursa (job #369784) | Cod sursa (job #1201683) | Cod sursa (job #1757274)
#include <cstdio>
#include <vector>
using namespace std;
const int nmx = 16002;
int n;
int cost[nmx];
int dp[nmx];
int maxim;
vector <int> g[nmx];
void citire()
{
scanf("%d", &n);
for(int i = 1; i <= n; ++i)
scanf("%d", &cost[i]);
for(int i = 1; i < n; ++i)
{
int nod1, nod2;
scanf("%d %d", &nod1, &nod2);
g[nod1].push_back(nod2);
g[nod2].push_back(nod1);
}
}
int dfs(int nod, int tata)
{
dp[nod] = cost[nod];
for(vector<int>::iterator it = g[nod].begin(); it != g[nod].end(); ++it)
{
if(*it == tata)
continue;
dfs(*it,nod);
if(dp[*it] > 0)
dp[nod] += dp[*it];
}
maxim = max(maxim,dp[nod]);
}
int main()
{
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
citire();
dfs(1,0);
printf("%d\n", maxim);
return 0;
}