Pagini recente » Cod sursa (job #1623660) | Cod sursa (job #2067107) | Cod sursa (job #715880) | Cod sursa (job #1397201) | Cod sursa (job #211189)
Cod sursa(job #211189)
const cif:array['0'..'9'] of byte=(0,1,2,3,4,5,6,7,8,9);
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;
ss:string[15];
sw,sw2,temp:boolean;
x,k1,ks: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; ok:boolean);
var p:adr;
begin
E[nod]:=not ok;
p:=L[nod];
while p<>nil do
begin
if ok=E[p^.val] then df(p^.val,ok);
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);
sw:=false;
sw2:=true;
for k1:=1 to x do
begin
readln(f,n);
for i:=1 to n do L[i]:=nil;
for i:=1 to n do V[i]:=0;
for k2:=1 to n-1 do
begin
readln(f,ss);
ks:=1;
i:=0; j:=0;
while ss[ks]<>' ' do
begin
i:=i*10+cif[ss[ks]];
inc(ks);
end;
inc(ks);
while ks<=length(ss) do
begin
j:=j*10+cif[ss[ks]];
inc(ks);
end;
inc(v[i]);
new(p);
p^.val:=j; p^.urm:=L[i];
L[i]:=p;
end;
df(1,sw);
temp:=sw; sw:=sw2; sw2:=temp;
T[1]:=0;
max:=0;
zvon(1);
writeln(g,max);
end;
close(f);
close(g);
end.