Pagini recente » Cod sursa (job #3173026) | Cod sursa (job #1429023) | Cod sursa (job #3288954) | Cod sursa (job #1397729) | Cod sursa (job #587309)
Cod sursa(job #587309)
#include <iostream>
#include <vector>
using namespace std;
#define maxN 16004
#define PB push_back
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 = 0;
for (int i = 1; i <= N; ++ i)
sol = max (sol, a[i]);
printf ("%lld", sol);
return 0;
}