Pagini recente » Cod sursa (job #335176) | Cod sursa (job #2520705) | Cod sursa (job #1401798) | Cod sursa (job #1601877) | Cod sursa (job #186414)
Cod sursa(job #186414)
// Asmax - infoarena
// complexitate O(n)
type pelem=^elem;
elem=record
info:integer;
next:pelem;
end;
var fi,fo:text;
n,i,a,b,ct:integer;
max:longint;
v,t,f:array[1..16000]of longint;
leg:array[1..16000]of pelem;
s:array[1..16000,1..16000]of byte;
p:pelem;
procedure df(nod:integer);
var p:pelem;
begin
p:=leg[nod];
while p<>nil do
begin
if s[p^.info,nod]=0 then
begin
s[p^.info,nod]:=1;
s[nod,p^.info]:=1;
df(p^.info);
end;
p:=p^.next;
end;
inc(ct);
T[ct]:=nod;
end;
begin
assign(fi,'asmax.in'); reset(fi);
assign(fo,'asmax.out'); rewrite(fo);
read(fi,n);
for i:=1 to n do
read(fi,v[i]);
for i:=1 to n-1 do
begin
read(fi,a,b);
new(p);
p^.info:=a;
p^.next:=leg[b];
leg[b]:=p;
new(p);
p^.info:=b;
p^.next:=leg[a];
leg[a]:=p;
end;
ct:=0;
df(1);
for i:=1 to n do
if v[t[i]]>0 then
begin
p:=leg[t[i]];
while p<>nil do
begin
if f[p^.info]=0 then
v[p^.info]:=v[p^.info]+v[t[i]];
p:=p^.next;
end;
f[t[i]]:=1;
end
else
f[t[i]]:=1;
max:=-1000;
for i:=1 to n do
if v[i]>max then max:=v[i];
writeln(fo,max);
close(fi);
close(fo);
end.