Pagini recente » Istoria paginii runda/urmasii_lui_moisil_2012_xi-xii | Cod sursa (job #284685) | Cod sursa (job #781729) | Cod sursa (job #633847) | Cod sursa (job #587991)
Cod sursa(job #587991)
#include <iostream>
#include <vector>
using namespace std;
#define maxN 16004
#define PB push_back
#define inf (1 << 30)
bool cont[maxN];
vector <int> lista[maxN];
long long a[maxN];
void df (int nod)
{
cont[nod] = true;
for (unsigned int i = 0; i < lista[nod].size(); ++ i)
if ( ! cont[lista[nod][i]] )
{
df (lista[nod][i]);
if (a[lista[nod][i]] > 0) a[nod] += a[lista[nod][i]];
}
}
int main()
{
freopen ("asmax.in", "r", stdin);
freopen ("asmax.out", "w", stdout);
int N;
scanf ("%d", &N);
for (int i = 1; i <= N; ++ i)
scanf ("%lld", &a[i]);
for (int i = 1; i < N; ++ i)
{
int a, b;
scanf ("%d %d", &a, &b);
lista[a]. PB (b);
lista[b]. PB (a);
}
int nod = 1;
cont[nod] = true;
df (1);
long long sol = - inf;
for (int i = 1; i <= N; ++ i)
sol = max (sol, a[i]);
printf ("%lld", sol);
return 0;
}