Pagini recente » Cod sursa (job #2443868) | Cod sursa (job #1381242) | Cod sursa (job #1475640) | Cod sursa (job #1753446) | Cod sursa (job #153759)
Cod sursa(job #153759)
#include <stdio.h>
#include <fstream>
using namespace std;
#define in "asmax.in"
#define out "asmax.out"
#define dim 16001
inline int Maxim(int a, int b) {
if ( a > b ) return a;
return b;
}
int N;
int maxim = -1001;
int Val[dim], S[dim];
bool Sel[dim];
typedef struct NOD {
int vf;
NOD* next;
} *PNOD;
PNOD L[dim];
void Add(int,int);
void Solve(int);
int main()
{
int x, y;
freopen(in,"r",stdin);
freopen(out,"w",stdout);
scanf("%d", &N);
for ( int i = 1; i <= N; i++ )
scanf("%d", &Val[i]);
for ( int i = 1; i < N; i++ )
scanf("%d%d", &x, &y), Add(x,y), Add(y,x);
Solve(1);
printf("%d\n", maxim);
}
void Add(int i, int j)
{
PNOD q = new NOD;
q->vf = j;
q->next = L[i];
L[i] = q;
}
void Solve(int nod)
{
Sel[nod] = 1;
S[nod] = Val[nod];
for ( PNOD q = L[nod]; q; q=q->next )
{
if ( !Sel[q->vf] )
{
Solve(q->vf);
S[nod] = Maxim( S[nod], S[nod] + S[q->vf] );
if ( maxim < S[nod] ) maxim = S[nod];
}
}
}