Cod sursa(job #598890)

Utilizator vendettaSalajan Razvan vendetta Data 27 iunie 2011 14:32:02
Problema Asmax Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.75 kb
const f = 'asmax.in'; g = 'asmax.out';

type pnod = ^nod;
     nod = record
        next : pnod;
        info : longint;
end;

var
    a : array[0..100001] of pnod;
    viz,c : array[0..100001] of longint;
    x, y, start, m, n : longint;
    s, vf, max, nrc, i : longint;
    p : pnod;
    buf, buf1 : array[1..1 shl 17] of char;

procedure add( var dest : pnod; val : longint );
    var
        q : pnod;

    begin
        new( q );
        q^.info := val;
        q^.next := dest;
        dest := q;
    end;

procedure dfs( nod : longint );
    var
        q : pnod;

    begin
        write(nod,' ');
        viz[nod] := 1;
        q := a[nod];
        while q <> nil do begin
            if viz[q^.info] = 0 then dfs( q^.info ) ;
            q := q^.next;
        end;
        //writeln;

    end;
begin
    assign( input,f ); reset( input );
    assign( output,g ); rewrite( output );
    settextbuf( input,buf );
    settextbuf( output,buf1 );
    readln(n );
    for i := 1 to n do read(c[i]);
    for i:=1 to n-1 do begin
        readln(x, y);
        add( a[x], y );
        add( a[y], x );
    end;

    for i := 1 to n do
        begin
        s := 0;
        p := a[i];
        //write('vecinii lui',' ',i,' ',':');
        while p <> nil do begin
            //write(p^.info );
            s := s + c[p^.info];
            p := p^.next;
        end;
        //writeln(  );
        s := s + c[i];
        if s > max then max := s;
    end;
     {
    for i := 1 to n do
        begin
        //if viz[i] = 0 then begin
        write('dfs ',i,' : ');
        fillchar(viz,sizeof(viz),0);
        dfs(i);
        writeln;
            //inc( nrc );
        end;

      }
   writeln( max );
end.