Pagini recente » Cod sursa (job #1328256) | Cod sursa (job #112780) | Cod sursa (job #1057611) | Cod sursa (job #1309650) | Cod sursa (job #1757267)
#include <cstdio>
#include <vector>
using namespace std;
const int nmx = 16002;
int n;
int cost[nmx];
int dp[nmx];
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];
}
}
void rezolvare()
{
int suma = 0, maxim = 0;
for(vector<int>::iterator it = g[1].begin(); it != g[1].end(); ++it)
{
dfs(1,*it);
maxim = max(maxim,dp[*it]);
suma += dp[*it];
}
printf("%d\n", max(suma,maxim));
}
int main()
{
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
citire();
rezolvare();
return 0;
}