Cod sursa(job #146462)
#include<stdio.h>
#include<stdlib.h>
#define N 100000
int t,n,i,j,sub[N],sef,ang,s[N];
int *a[N];
struct structura
{
int x,y;
}v[N];
void read_un_test()
{
int aa,bb,i;
scanf("%d",&n);
for(i=1;i<n;++i)
{
scanf("%d%d",&aa,&bb);
sub[aa]++;
v[i].x=aa;
v[i].y=bb;
}
for(i=1;i<=n;++i)
{
a[i]=new int[sub[i]+1];
a[i][0]=0;
}
for(i=1;i<n;++i)
{
sef=v[i].x;
ang=v[i].y;
a[sef][++a[sef][0]]=ang;
}
}
void df(int x)
{
for(int i=1;i<=a[x][0];++i)
{
df(a[x][i]);
s[x]+=s[a[x][i]];
}
++s[x];
}
int comp(const void *a,const void *b){
return -s[*(int*)a]+s[*(int*)b];
}
int f(int x){
int max=0,y;
for(int i=1;i<=a[x][0];++i){
y=f(a[x][i]);
if(i+y>max)
max=i+y;
}
return max;
}
void solve_un_test()
{
df(1);
for(int i=1;i<=n;++i)
qsort(a[i]+1,a[i][0],sizeof(a[i][0]),comp);
printf("%d\n",f(1));
}
void solve()
{
scanf("%d",&t);
for(int i=1;i<=t;++i)
{
read_un_test();
solve_un_test();
for(int j=1;j<=n;++j)
delete a[j];
}
}
int main(){
freopen("zvon.in","r",stdin);
freopen("zvon.out","w",stdout);
solve();
return 0;
}