Pagini recente » Cod sursa (job #2772094) | Profil Ovid | Algoritmiada 2010 - Clasament general, Clasele 11-12 | Monitorul de evaluare | Cod sursa (job #804977)
Cod sursa(job #804977)
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;
f,g: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];
end;
p:=p^.next;
end;
end;
begin
assign(f,'asmax.in');
assign(g,'asmax.out');
reset(f); rewrite(g); readln(f,n);
for i:=1 to n do read(f,s[i]); readln(f);
for i:=1 to n-1 do begin
readln(f,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; dfs(r); max:=s[1];
for i:=1 to n do
if s[i]>max then max:=s[i];
write(g,max);
close(g);
end.