Pagini recente » Cod sursa (job #3159683) | Cod sursa (job #133494) | Cod sursa (job #2624625) | Cod sursa (job #777144) | Cod sursa (job #65351)
Cod sursa(job #65351)
#include <cstdio>
#define maxn 16001
FILE *in = fopen("asmax.in","r"), *out = fopen("asmax.out","w");
int n;
int vals[maxn];
int viz[maxn];
struct graf
{
int nod;
graf *next;
};
graf *a[maxn] = {NULL};
void add(graf *&p, int v)
{
graf *q = new graf;
q->nod = v;
q->next = p;
p = q;
}
void read()
{
fscanf(in, "%d", &n);
for ( int i = 1; i <= n; ++i )
fscanf(in, "%d", &vals[i]);
int x, y;
for ( int i = 1; i < n; ++i )
{
fscanf(in, "%d %d", &x, &y);
add(a[x], y);
add(a[y], x);
}
}
void DF(int nod)
{
while ( a[nod] )
{
viz[nod] = 1;
if ( !viz[a[nod]->nod] )
{
DF(a[nod]->nod);
if ( vals[a[nod]->nod] > 0 )
vals[nod] += vals[a[nod]->nod];
}
a[nod] = a[nod]->next;
}
}
int main()
{
read();
DF(1);
int max = -1000000000;
for ( int i = 1; i <= n; ++i )
if ( vals[i] > max )
max = vals[i];
fprintf(out, "%d\n", max);
return 0;
}