Pagini recente » Cod sursa (job #1890525) | Cod sursa (job #1298741) | Cod sursa (job #2934446) | Cod sursa (job #602272) | Cod sursa (job #210871)
Cod sursa(job #210871)
type adr=^noduri;
noduri=record val:longint; urm:adr; end;
var {
S - valorile sortate
T - timpi
L - liste
E - existenta (pentru dfs)
V - valori (cati "subordonati" are fiecare nod)
}
L:array[1..100010] of adr;
V,T,S:array[1..100010] of longint;
E:array[1..100010] of boolean;
n,i,j,k2,max:longint;
x,k1:byte;
p:adr;
f,g:text;
function poz(a,b:longint):longint;
var i,j:shortint;
t:longint;
begin
i:=0; j:=-1;
while a<b do
begin
if v[S[a]]<v[S[b]] then
begin
t:=S[a]; S[a]:=S[b]; S[b]:=t;
t:=i; i:=-j; j:=-t;
end;
inc(a,i); inc(b,j);
end;
poz:=a;
end;
procedure sort(a,b:longint);
var m:longint;
begin
if a<b then
begin
m:=poz(a,b);
sort(a,m-1);
sort(m+1,b);
end;
end;
procedure df(nod:longint);
var p:adr;
begin
E[nod]:=true;
p:=L[nod];
while p<>nil do
begin
if not E[p^.val] then df(p^.val);
inc(v[nod],v[p^.val]);
p:=p^.urm;
end;
end;
procedure zvon(nod:longint);
var p:adr; k,i:longint;
begin
p:=L[nod];
k:=0;
while p<>nil do
begin
inc(k);
S[k]:=p^.val;
p:=p^.urm;
end;
sort(1,k);
for i:=1 to k do
begin
T[S[i]]:=T[nod]+i;
if T[S[i]]>max then max:=T[S[i]];
end;
for i:=1 to k do zvon(S[i]);
end;
begin
assign(f,'zvon.in');
reset(f);
assign(g,'zvon.out');
rewrite(g);
readln(f,x);
for k1:=1 to x do
begin
readln(f,n);
for i:=1 to n do
begin
L[i]:=nil;
E[i]:=false;
V[i]:=0;
end;
for k2:=1 to n-1 do
begin
readln(f,i,j);
inc(v[i]);
new(p);
p^.val:=j; p^.urm:=L[i];
L[i]:=p;
end;
df(1);
T[1]:=0;
max:=0;
zvon(1);
writeln(g,max);
end;
close(f);
close(g);
end.