Pagini recente » Cod sursa (job #2444071) | Cod sursa (job #425038) | Cod sursa (job #2936832) | Cod sursa (job #284050) | Cod sursa (job #139847)
Cod sursa(job #139847)
type point=^nod;
nod=record
n:longint;
ua:point;
end;
vector=array[1..100010] of longint;
var f1,f2:text;
i,j,t,n,ii,jj,dimh:longint;
q:point;
l:array[1..100010] of point;
v,a:vector;
procedure repair(i:longint);
var l,r,max,aux:longint;
begin
l:=2*i;
r:=l+1;
max:=i;
if (l<=dimh)and(a[l]>a[max]) then
max:=l;
if (r<=dimh)and(a[r]>a[max]) then
max:=r;
if max<>i then
begin
aux:=a[i];
a[i]:=a[max];
a[max]:=aux;
repair(max);
end;
end;
procedure buildheap(h:longint);
var i:longint;
begin
for i:=h div 2 downto 1 do
repair(i);
end;
procedure heapsort(h:longint);
var i,aux:longint;
begin
buildheap(h);
for i:=h downto 2 do
begin
aux:=a[1];
a[1]:=a[i];
a[i]:=aux;
dec(dimh);
repair(1);
end;
end;
procedure afla(x:longint);
var i,j,m,h,aux,r,max:longint;
p,s,q:point;
begin
max:=0;
h:=0;
p:=l[x];
while p<>nil do
begin
inc(h);
m:=p^.n;
if v[m]=-1 then
afla(m);
new(q);
q^.ua:=s;
q^.n:=v[m]+1;
s:=q;
p:=p^.ua;
end;
for i:=1 to h do
begin
a[i]:=s^.n;
s:=s^.ua
end;
dimh:=h;
heapsort(h);
r:=0;
a[0]:=0;
for i:=h downto 0 do
begin
if a[i]+r>max then
max:=a[i]+r;
inc(r);
end;
l[x]:=nil;
v[x]:=max;
end;
begin
assign(f1,'zvon.in');
reset(f1);
assign(f2,'zvon.out');
rewrite(f2);
read(f1,t);
for j:=1 to t do
begin
read(f1,n);
for i:=1 to n-1 do
begin
v[i]:=-1;
read(f1,ii,jj);
new(q);
q^.ua:=l[ii];
q^.n:=jj;
l[ii]:=q;
end;
v[n]:=-1;
afla(1);
writeln(f2,v[1]);
end;
close(f1);
close(f2);
end.