Cod sursa(job #127986)

Utilizator Data 25 ianuarie 2008 18:19:35
Problema Zvon Scor 0
Compilator fpc Status done
Runda Arhiva de probleme Marime 1.78 kb
var fi,fo:text;
    k,max,t,n,i,j,v1,v2,nnn:longint;
    a,nivel:array[0..100001,0..100001]of longint;
    niv,nr,tmin,nn:array[0..200000]of longint;
function part(poz,st,dr:longint):longint;
var i,j,aux,s:longint;
begin
  i:=st; j:=dr; s:=-1;
  while i<j do
    begin
      if a[poz,st]<a[poz,dr] then
        begin
          aux:=a[poz,st];
          a[poz,st]:=a[poz,dr];
          a[poz,dr]:=aux;
          s:=-s;
        end;
      if s=1 then inc(i)
             else dec(j);
    end;
  part:=i;
end;
procedure qsort(nod,st,dr:longint);
var p:longint;
begin
  if st<dr then
    begin
      p:=part(nod,st,dr);
      qsort(nod,st,p-1);
      qsort(nod,p+1,dr);
    end;
end;
function findmax(nod:longint):longint;
var i:longint;
begin
  qsort(nod,1,nr[nod]);
  max:=-maxint;
  for i:=1 to nr[nod] do
    if tmin[a[nod,i]]+i>max then max:=tmin[a[nod,i]]+i;
  findmax:=max;
end;
procedure solv;
begin
  read(fi,n);
    niv[1]:=1;
    nn[1]:=1;
    nivel[1,1]:=1;
    for i:=1 to n-1 do
      begin
        read(fi,v1,v2);
        inc(nr[v1]);
        a[v1,nr[v1]]:=v2;
        niv[v2]:=niv[v1]+1;
        inc(nn[niv[v2]]);
        nivel[niv[v2],nn[niv[v2]]]:=v2;
        if niv[v2]>nnn then nnn:=niv[v2];
      end;
    for i:=nnn-1 downto 1 do
      for j:=1 to nn[i] do
        tmin[nivel[i,j]]:=findmax(nivel[i,j]);
    writeln(fo,tmin[1]);
    for i:=1 to nnn do
     for j:=1 to nn[i] do
       nivel[i,j]:=0;
    for i:=1 to n do
      for j:=1 to nr[i] do
        a[i,j]:=0;
    for i:=1 to n do
      begin
        niv[i]:=0;
        nn[i]:=0;
        nr[i]:=0;
      end;
end;
begin
  assign(fi,'zvon.in'); reset(fi);
  assign(fo,'zvon.out'); rewrite(fo);
  read(fi,t);
  for k:=1 to t do
    solv;
  close(fi);
  close(fo);
end.