Cod sursa(job #935748)

Utilizator t.g.g.tt.g.g.t t.g.g.t Data 4 aprilie 2013 17:23:46
Problema Asmax Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.16 kb
type list=^cel;
     cel=record
       v:integer;
       urm:list;
     end;

var a,ult:array[1..16000]of list;
    b:array[1..16000]of longint;
    stare:array[1..16000]of byte;
    i,n,v1,v2:integer;
    smax:longint;
    r:list;
    buf1:array[1..16000]of byte;

procedure parc(n:integer);
   var r:list;
  begin
    stare[n]:=1;
    r:=a[n];
    while r<>nil do
      begin
        if stare[r^.v]=0 then
          begin
            parc(r^.v);
            if b[r^.v]>0 then b[n]:=b[n]+b[r^.v];
          end;
        r:=r^.urm;
      end;
    if b[n]>smax then smax:=b[n];
  end;

begin
  assign(input,'asmax.in'); reset(input); settextbuf(input,buf1);
  readln(n);
  for i:=1 to n do read(b[i]);
  for i:=1 to n do begin new(a[i]); a[i]^.urm:=nil; a[i]^.v:=i; ult[i]:=a[i]; end;
  for i:=1 to n-1 do
    begin
      readln(v1,v2);
      new(r);
      r^.v:=v2;
      r^.urm:=nil;
      ult[v1]^.urm:=r;
      ult[v1]:=r;
      new(r);
      r^.v:=v1;
      r^.urm:=nil;
      ult[v2]^.urm:=r;
      ult[v2]:=r;
    end;
  smax:=b[1];
  parc(1);

  assign(output,'asmax.out'); rewrite(output);
  writeln(smax);
  close(output);
end.