Cod sursa(job #1180113)

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

var lda:array[1..100005] of lista;
    viz,D:array[1..100005] of longint;
    a,b,n,i,max,nod1:longint;
    r: lista;
    b1,b2 : array [0..1 shl 17] of char;

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);
                          new(r);
                          r^.info:=a;
                          r^.pred:=lda[b];
                          lda[b]:=r;
                          new(r);
                          r^.info:=b;
                          r^.pred:=lda[a];
                          lda[a]:=r;
                        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.