Cod sursa(job #804977)

Utilizator tibi2012Galatanu Tiberiu tibi2012 Data 30 octombrie 2012 19:32:45
Problema Asmax Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.1 kb
type lista=^celula;
     celula=record
       nod:longint;
       next:lista;
       end;
var graf:array [1..16000] of lista;
    s,grad:array [1..16000] of longint;
    b:array [1..16000] of boolean;
    r,max,i,x,y,n:longint;
    v:lista;
    f,g:text;

procedure dfs(nod:longint);
 var p:lista;
begin
 p:=graf[nod];
  while p<>nil do begin
   if b[p^.nod]=false then begin b[p^.nod]:=true; dfs(p^.nod);
    if s[p^.nod]>0 then s[nod]:=s[nod]+s[p^.nod];
      end;
      p:=p^.next;
   end;
end;

begin
 assign(f,'asmax.in');
  assign(g,'asmax.out');
 reset(f); rewrite(g); readln(f,n);
  for i:=1 to n do read(f,s[i]); readln(f);
  for i:=1 to n-1 do begin
                      readln(f,x,y);
                      new(v); v^.nod:=y; v^.next:=graf[x]; graf[x]:=v;
                      new(v); v^.nod:=x; v^.next:=graf[y]; graf[y]:=v;
                      inc(grad[x]); inc(grad[y]);
                      end;
  for i:=1 to n do
   if grad[i]=1 then break;
  r:=i; b[r]:=true; dfs(r); max:=s[1];
  for i:=1 to n do
   if s[i]>max then max:=s[i];
 write(g,max);
 close(g);
end.