Pagini recente » Cod sursa (job #552254) | Cod sursa (job #2695980) | Cod sursa (job #820030) | Cod sursa (job #1840128) | Cod sursa (job #769495)
Cod sursa(job #769495)
Program asmax;
type lista=^celula;
celula=record
nod:longint;
next:lista;
end;
var graf:array [1..16000] of lista;
s,grad:array [1..16000] of longint;
b:array [1..16000] of boolean;
r,max,i,x,y,n:longint;
v:lista;
fi,fo:text;
procedure dfs(nod:longint);
var p:lista;
begin
p:=graf[nod];
while p<>nil do begin
if b[p^.nod]=false then begin b[p^.nod]:=true; dfs(p^.nod);
if s[p^.nod]>0 then s[nod]:=s[nod]+s[p^.nod];
if s[nod]>max then max:=s[nod];
end;
p:=p^.next;
end;
end;
begin
assign(fi,'asmax.in');
assign(fo,'asmax.out');
reset(fi); rewrite(fo); readln(fi,n);
for i:=1 to n do read(fi,s[i]); readln(fi);
for i:=1 to n-1 do begin
readln(fi,x,y);
new(v); v^.nod:=y; v^.next:=graf[x]; graf[x]:=v;
new(v); v^.nod:=x; v^.next:=graf[y]; graf[y]:=v;
inc(grad[x]); inc(grad[y]);
end;
for i:=1 to n do
if grad[i]=1 then break;
r:=i; b[r]:=true; max:=-1000000; dfs(r);
write(fo,max);
close(fo);
end.