Cod sursa(job #769489)

Utilizator ctlin04UAIC.VlasCatalin ctlin04 Data 19 iulie 2012 16:30:37
Problema Asmax Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.12 kb
Program asmax;
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;
    fi,fo: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];
     if s[nod]>max then max:=s[nod];
      end;
      p:=p^.next;
   end;
end;
begin
 assign(fi,'asmax.in');
  assign(fo,'asmax.out');
 reset(fi); rewrite(fo); readln(fi,n);
  for i:=1 to n do read(fi,s[i]); readln(fi);
  for i:=1 to n-1 do begin
                      readln(fi,x,y); s[i]:=1;
                      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; max:=-1000000; dfs(r);
 write(fo,max);
 close(fo);
end.