Pagini recente » Cod sursa (job #868023) | Cod sursa (job #2712013) | Cod sursa (job #2194454) | Cod sursa (job #948199) | Cod sursa (job #164199)
Cod sursa(job #164199)
#include <cstdio>
#include <vector>
using namespace std;
#define Nmax 16384
#define INF 0x3f3f3f3f
#define pb push_back
#define sz size()
int n;
vector<int> lv[Nmax];
int sir[Nmax], v[Nmax], p[Nmax], sol = -INF;
void citire()
{
int i, a, b;
scanf("%d\n", &n);
for (i = 1; i <= n; ++i)
scanf("%d", &sir[i]);
for (i = 1; i < n; ++i)
{
scanf("%d %d", &a, &b);
lv[a].pb(b);
lv[b].pb(a);
}
}
void df(int nod)
{
int i, lim = lv[nod].sz;
v[nod] = 1;
p[nod] = sir[nod];
for (i = 0; i < lim; ++i)
if (!v[lv[nod][i]])
{
df(lv[nod][i]);
if (p[lv[nod][i]] > 0)
p[nod] += p[lv[nod][i]];
}
if (p[nod] > sol)
sol = p[nod];
}
void solve()
{
df(1);
printf("%d\n", sol);
}
int main()
{
freopen("asmax.in", "r", stdin);
freopen("asmax.out", "w", stdout);
citire();
solve();
return 0;
}