Cod sursa(job #803595)

Utilizator andrei_toaderToader Andrei Sorin andrei_toader Data 27 octombrie 2012 21:26:10
Problema Asmax Scor 100
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.25 kb
program asmax;
var f,g:text;
    n,i,j,x,y:integer;
    v:array[1..16000] of integer;
    a:array of array of integer;
    s:array[1..16000] of longint;
    viz:array[1..16000] of 0..1;
    suma,maxim:longint;
    ok:boolean;

function max (a,b:longint):longint;
begin
 if a>b then
  max:=a
 else
 max:=b;
end;

procedure df(nod:integer);
var  i:integer;
begin
 viz[nod]:=1;
 s[nod]:=v[nod];
 for i:=1 to a[nod,0] do
  if viz[a[nod,i]]=0 then
  begin
   viz[a[nod,i]]:=1;
   df(a[nod,i]);
   s[nod]:=max(s[nod],s[nod]+s[a[nod,i]]);
  end;
end;

begin
 assign (f,'asmax.in'); reset(f);
 assign (g,'asmax.out'); rewrite (g);
 readln(f,n);
 ok:=true;
 maxim:=-maxlongint;
 for i:=1 to n do
 begin
  read (f,v[i]);
  if v[i]>maxim then
   maxim:=v[i];
  if v[i]>0 then
   ok:=false;
 end;
 readln (f);
 if ok then
  write (g,maxim)
 else
 begin
 setlength(a,n+1);
 for i:=1 to n do
  setlength (a[i],1);
 for i:=1 to n-1 do
 begin
 readln (f,x,y);
 setlength (a[x],length (a[x])+1);
 a[x,0]:=a[x,0]+1;
 a[x,a[x,0]]:=y;
 setlength (a[y],length (a[y])+1);
 a[y,0]:=a[y,0]+1;
 a[y,a[y,0]]:=x;
 end;
 df(1);
 suma:=0;
 for i:=1 to n do
  suma:=max(suma,s[i]);
  write (g,suma);
 end;
 close (f);
 close(g);
end.