Cod sursa(job #1101812)

Utilizator Mihai_ChihaiMihai Chihai Mihai_Chihai Data 9 februarie 2014 08:59:31
Problema Diametrul unui arbore Scor 50
Compilator fpc Status done
Runda Arhiva educationala Marime 1.9 kb
program diametru;
type lista=^celula;
     celula=record
        info:longint;
        urm:lista;
        end;
var a:array[1..10000] of lista;
    c,d:array[1..10000] of longint;
    n,m,i,p,u,x,y,nod:longint;
    r:lista;

begin
assign(input,'darb.in'); reset(input);
assign(output,'darb.out'); rewrite(output);
readln(n);
for i:=1 to n-1 do begin
         readln(x,y);
         new(r);
         r^.info:=y; r^.urm:=a[x]; a[x]:=r;
         new(r);
         r^.info:=x; r^.urm:=a[y]; a[y]:=r;
         end;
for i:=1 to n do d[i]:=0;
p:=1; u:=1;
c[1]:=1;  d[1]:=1;
while p<=u do begin
        r:=a[c[p]];
        while r<>nil do begin
                        if d[R^.info]=0 then begin
                                        inc(u);
                                        c[u]:=r^.info;
                                        d[r^.info]:=d[c[p]]+1;
                                        if d[r^.info]>m then begin
                                                                nod:=r^.info;
                                                                m:=d[r^.info];
                                                                end;
                                        end;
                        r:=r^.urm;
                        end;
        inc(p);
        end;
for i:=1 to n do d[i]:=0;
p:=1; u:=1;
c[1]:=nod;  d[nod]:=1;  m:=0;
while p<=u do begin
        r:=a[c[p]];
        while r<>nil do begin
                        if d[R^.info]=0 then begin
                                        inc(u);
                                        c[u]:=r^.info;
                                        d[r^.info]:=d[c[p]]+1;
                                        if d[r^.info]>m then m:=d[r^.info];
                                        end;
                        r:=r^.urm;
                        end;
        inc(p);
        end;
write(m);
close(output);
end.