Pagini recente » Cod sursa (job #2851679) | Cod sursa (job #1734832) | Cod sursa (job #431769) | Cod sursa (job #2164006) | Cod sursa (job #141508)
Cod sursa(job #141508)
const DIM=16001;
type adresa=^nod;
nod=record
inf:longint;
adr:adresa;
end;
var f,g:text;
p:array[1..DIM] of adresa;
v:array[1..DIM] of longint;
n,i,x,y,max:longint;
viz:array[1..DIM] of byte;
rez:array[1..DIM] of longint;
q:adresa;
procedure parc(k:longint);
var q:adresa;
sum:longint;
ok:byte;
begin
sum:=0;
q:=p[k];
viz[k]:=1;
ok:=0;
while (q<>nil) do begin
if (viz[q^.inf]=0) then begin
parc(q^.inf);
if (rez[q^.inf]>0) then begin
sum:=sum+rez[q^.inf];
ok:=1;
end;
end;
q:=q^.adr;
end;
if ok=0 then rez[k]:=v[k]
else
if (sum+v[k]>v[k]) then rez[k]:=sum+v[k]
else rez[k]:=v[k];
if rez[k]>max then max:=rez[k];
end;
begin
assign(f,'asmax.in');
reset(f);
read(f,n);
for i:=1 to n do begin
read(f,v[i]);
p[i]:=nil;
end;
for i:=1 to n-1 do begin
read(f,x,y);
new(q);
q^.adr:=p[x];
q^.inf:=y;
p[x]:=q;
new(q);
q^.adr:=p[y];
q^.inf:=x;
p[y]:=q;
end;
max:=-16000001;
parc(1);
assign(g,'asmax.out');
rewrite(g);
write(g,max);
close(g);
end.