Cod sursa(job #141508)

Utilizator BuniakovskiNeguletu Octavian Buniakovski Data 23 februarie 2008 12:34:01
Problema Asmax Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.37 kb
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.