Pagini recente » Cod sursa (job #2495321) | Cod sursa (job #1778814) | Monitorul de evaluare | Cod sursa (job #1473336) | Cod sursa (job #105468)
Cod sursa(job #105468)
type vector=array[0..100010]of longint;
var n,i,j,k,tt:longint;
ind,id,v,max,nrmax,x,y,t,nr:vector;
procedure qsort(ls,ld:longint);
var i,j,aux:longint;
begin
i:=ls;j:=ld;
while true do begin
while (nr[i]>=nr[j])and(i<>j) do inc(i);
if i=j then break;
aux:=nr[i];nr[i]:=nr[j];nr[j]:=aux;dec(j);
while (nr[i]>=nr[j])and(i<>j) do dec(j);
if i=j then break;
aux:=nr[i];nr[i]:=nr[j];nr[j]:=aux;inc(i);
end;
if j-1>ls then qsort(ls,j-1);
if j+1<ld then qsort(j+1,ld);
end;
procedure df(nod:longint);
var i,j,p1,p2,aux:longint;
begin
for i:=ind[nod]+1 to ind[nod+1] do
begin
df(v[i]);
{ inc(nr[t[v[i]]]);
if t[v[i]]=max[nod] then
inc(nrmax[nod]);
if t[v[i]]>max[nod] then
begin
max[nod]:=t[v[i]];
nrmax[nod]:=1;
end;}
end;
fillchar(nr,sizeof(nr),0);
for i:=ind[nod]+1 to ind[nod+1] do
begin
inc(nr[0]);
nr[nr[0]]:=t[v[i]];
end;
for i:=1 to nr[0] do
begin
p1:=random(nr[0])+1;
p2:=random(nr[0])+1;
aux:=nr[p1];
nr[p1]:=nr[p2];
nr[p2]:=aux;
end;
if nr[0]>0 then
qsort(1,nr[0]);
for i:=1 to nr[0] do
if nr[i]+i>t[nod] then
t[nod]:=nr[i]+i;
end;
begin
assign(input,'zvon.in');reset(input);
assign(output,'zvon.out');rewrite(output);
randomize;
readln(tt);
for k:=1 to tt do
begin
readln(n);
for i:=2 to n do
begin
readln(x[i],y[i]);
inc(ind[x[i]]);
end;
for i:=2 to n do
ind[i]:=ind[i-1]+ind[i];
for i:=n downto 1 do
ind[i]:=ind[i-1];
for i:=2 to n do
begin
inc(id[x[i]]);
v[ind[x[i]]+id[x[i]]]:=y[i];
end;
ind[n+1]:=ind[n]+id[n];
if n<>1 then
df(1);
writeln(t[1]);
for i:=0 to 100010 do
begin
max[i]:=0;
nrmax[i]:=0;
v[i]:=0;
ind[i]:=0;
id[i]:=0;
nr[i]:=0;
t[i]:=0;
end;
end;
end.