Cod sursa(job #141394)

Utilizator marinMari n marin Data 23 februarie 2008 10:51:21
Problema Asmax Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.17 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.