Pagini recente » Cod sursa (job #1733247) | Cod sursa (job #1650249) | Cod sursa (job #174664) | Cod sursa (job #2063668) | Cod sursa (job #361264)
Cod sursa(job #361264)
#include <iostream>
#include <fstream>
using namespace std;
int const maxn= 16 * 1000;
typedef int A1 [ 2 * (maxn-1) ]; typedef int A2 [ 1 + maxn ];
typedef int A3 [ 2 + maxn ]; typedef int A4 [ maxn ];
A1 E,A; A2 V,D,P,L,M; A3 S; A4 Q;
int
main ( ) {
int n,i,s,a,b,qi,qo,t,z,y;
ifstream is ( "asmax.in" ) ;
ofstream os ( "asmax.out" ) ;
is >> n;
y=-1;
for ( i=1; n>=i; ++i ) {
is >> V[i]; D[i]=0; L[i]=0;
if ( y<V[i] ) { y=V[i]; }
}
if ( 0 >= y ) {
os << y << endl;
return 0;
}
s=2*(n-1);
for ( i=0; s>i; ++i ) {
is >> E[i]; ++ D[E[i]];
}
S[1]=0;
for ( i=2; n>=i; ++i ) {
P[i]=S[i]=S[-1+i]+D[-1+i];
}
S[1+n]=S[n]+D[n];
for ( i=0; s>i; i+=2 ) {
a=E[i]; b=E[1+i];
A[P[a]++]=b; A[P[b]++]=a;
}
L[1]=1; Q[0]=1; qi=1; qo=0;
while (qo<qi) {
a=Q[qo++]; t=S[1+a];
for ( i=S[a]; t>i; ++i ) {
b=A[i];
if ( 0 == L[b] ) {
L[b]=1+L[a]; Q[qi++]=b;
}
}
}
y=0;
--qo;
while ( 0 <= qo ) {
a=Q[qo--]; z=V[a]; t=S[1+a];
for ( i=S[a]; t>i; ++i ) {
b=A[i];
if ( L[a]<L[b] ) {
z += M[b];
}
}
M[a]=(0<z)?z:0;
if ( y<M[a] ) { y=M[a]; }
}
os << y << endl;
return 0;
}