Cod sursa(job #24435)

Utilizator AymdTrimbitas Viorel Stefan Aymd Data 2 martie 2007 13:11:10
Problema Asmax Scor 90
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.79 kb
var f,g:text;
    x,y,va,gr:array[1..16000]of longint;
    n,m,mm,i,b,a,max:longint;

begin
assign(f,'asmax.in');
reset(f);
assign(g,'asmax.out');
rewrite(g);
readln(f,n);
m:=n-1;
max:=-10000;
for i:=1 to n do begin
   read(f,va[i]);
   if va[i]>max then max:=va[i];
end;
readln(f);
for i:=1 to m do begin
   readln(f,x[i],y[i]);
   gr[x[i]]:=gr[x[i]]+1;
   gr[y[i]]:=gr[y[i]]+1;
end;
while m>1 do begin
   mm:=0;
   for i:=1 to m do begin
      a:=x[i];
      b:=y[i];
      if gr[a]=1 then begin
                      gr[a]:=0;
                      gr[b]:=gr[b]-1;
                      if va[a]>0 then begin
                                      va[b]:=va[b]+va[a];
                                      if va[b]>max then max:=va[b];
                                      end;
                      end
                 else if gr[b]=1 then begin
                      gr[b]:=0;
                      gr[a]:=gr[a]-1;
                      if va[b]>0 then begin
                                      va[a]:=va[a]+va[b];
                                      if va[a]>max then max:=va[a];
                                      end;
                                      end
                                 else begin
                                      mm:=mm+1;
                                      x[mm]:=a;
                                      y[mm]:=b;
                                      end;
   end;
m:=mm;
end;
if n=1 then write(g,max)
       else begin
            if (va[x[1]]>0)and(va[y[1]]>0) then begin
                                                a:=va[x[1]]+va[y[1]];
                                                if a>max then max:=a;
                                                end;
            write(g,max);
            end;
close(g);
end.