Cod sursa(job #1180111)

Utilizator azkabancont-vechi azkaban Data 29 aprilie 2014 22:39:44
Problema Diametrul unui arbore Scor 50
Compilator fpc Status done
Runda Arhiva educationala Marime 1.8 kb
Program diametru;
type lista=^celula;
       celula=record
         info:longint;
         pred:lista;
       end;

var lda:array[1..100000] of lista;
    viz,D:array[0..100000] of longint;
    a,b,n,m,k,i,t,g,j,max,nod1:longint;
    b1,b2 : array [0..1 shl 17] of char;

procedure add(v:longint; var p:lista);
   var r:lista;
    begin
         new(r);
         r^.info:=v;
         r^.pred:=p;
         p:=r;
    end;

procedure dfs(nod:longint);
    var r:lista;
    begin

           viz[nod]:=1;
           r:=lda[nod];
           while r<>nil do begin
                           if viz[r^.info]=0 then begin
                                                        D[r^.info]:=D[nod]+1;
                                                        if D[r^.info]>max then begin
                                                                       max:=D[r^.info];
                                                                       nod1:=r^.info;
                                                                       end;
                                                        dfs(r^.info);
                                                   end;
                                r:=r^.pred;
                           end;
    end;
begin
    assign(input,'darb.in'); settextbuf(input,b1); reset(input);
    assign(output,'darb.out'); settextbuf(output,b2); rewrite(output);
    readln(n);
    for i:=1 to n do lda[i]:=nil;
    for i:=1 to n do viz[i]:=0;
    while not seekeof do begin
                          readln(a,b);
                          add(a,lda[b]);
                          add(b,lda[a]);
                     end;
    d[1]:=0;
    dfs(1);
    for i:=1 to n do viz[i]:=0;
    D[nod1]:=1;
    max:=0;
    dfs(nod1);
    writeln(D[nod1]);
    close(output);
end.