Pagini recente » Cod sursa (job #2586944) | Cod sursa (job #1754814) | Cod sursa (job #973324) | Cod sursa (job #1753864) | Cod sursa (job #193615)
Cod sursa(job #193615)
#include <stdio.h>
#include <stdlib.h>
#define FOR(i,a,b) for(i=a;i<=b;++i)
#define N 100010
int t;
void start(void){
freopen("zvon.in","r",stdin);
freopen("zvon.out","w",stdout);
scanf("%d",&t);
}
int n;
int *cine[N];
int timp[N],cati[N];
void scan(void){
int i,x,y;
scanf("%d",&n);
FOR(i,1,n-1){
scanf("%d%d",&x,&y);
++cati[x];
cine[x]=(int*)realloc(cine[x],cati[x]*sizeof(int)+4);
cine[x][cati[x]]=y;
}
}
int max(int a,int b){
if (a>b)
return a;
return b;
}
int cmp(const void *a,const void *b){
return timp[*(int*)b]-timp[*(int*)a];
}
void df(int x){
int i,y;
FOR(i,1,cati[x])
df(cine[x][i]);
if (cati[x]>0)
cine[x][0]=0;
qsort(cine[x]+1,cati[x],sizeof(int),cmp);
FOR(i,1,cati[x]){
y=cine[x][i];
timp[x]=max(timp[x],i+timp[y]);
}
}
void solve(void){
int i;
FOR(i,1,n)timp[i]=0;
df(1);
FOR(i,1,n){
cine[i]=(int*)realloc(cine[i],0);
//free(cine[i]);
cati[i]=0;
}
printf("%d\n",timp[1]);
}
int main(void){
start();
while(t--){
scan();
solve();
}
exit(0);
}