Pagini recente » Cod sursa (job #681502) | Cod sursa (job #1210276) | Cod sursa (job #1078952) | Cod sursa (job #2637884) | Cod sursa (job #1803860)
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
const int NMAX = 16005;
const int INF = 2000000000;
int cost[NMAX], val;
vector <int> g[NMAX];
bool viz[NMAX];
int DFS(int nod)
{
viz[nod] = 1;
for(int i = 0; i < g[nod].size(); ++i)
if(!viz[g[nod][i]])
{
val = DFS (g[nod][i]);
if(val > 0)
cost[nod] += val;
}
return cost[nod];
}
int main()
{
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
int a, b, n, ans;
scanf("%d", &n);
for(int i = 1; i <= n; ++i)
scanf("%d", &cost[i]);
for(int i = 1; i < n; ++i)
{
scanf("%d%d", &a, &b);
g[a].push_back(b);
g[b].push_back(a);
}
DFS(1); ans = -INF;
for(int i = 1; i <= n; ++i)
ans = max(ans, cost[i]);
printf("%d\n", ans);
return 0;
}