Pagini recente » Cod sursa (job #2108764) | Cod sursa (job #1248181) | Cod sursa (job #1551723) | Cod sursa (job #1566082) | Cod sursa (job #146463)
Cod sursa(job #146463)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define N 100001
int t,n,*a[N],niv[N],v1[N],ta[N];
struct vec{
int x,y;
}v[N];
void df(int nod)
{
int i;
for(i=1;i<=a[nod][0];i++){
df(a[nod][i]);
v1[nod]+=v1[a[nod][i]];
}
++v1[nod];
}
int compare(const void *a,const void *b)
{
return v1[*(int *)b]-v1[*(int *)a];
}
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 read()
{
int i1,i;
scanf("%d",&t);
for(i1=1;i1<=t;i1++)
{
scanf("%d",&n);
memset(v1,0,sizeof(v1));
if(n==1)
{
printf("0\n");
continue;
}
for(i=1;i<=n-1;i++)
{
scanf("%d%d",&v[i].x,&v[i].y);
niv[v[i].x]++;
ta[v[i].y]=v[i].x;
}
for(i=1;i<=n;i++)
{
a[i]=new int[niv[i]+1];
a[i][0]=0;
}
for(i=1;i<=n-1;i++)
a[v[i].x][++a[v[i].x][0]]=v[i].y;
df(1);
v1[1]--;
for(i=1;i<=n;i++)
qsort(a[i]+1,a[i][0],sizeof(a[i][0]),compare);
printf("%d\n",f(1));
for(i=1;i<=n;i++)
delete a[i];
}
}
int main()
{
freopen("zvon.in","r",stdin);
freopen("zvon.out","w",stdout);
read();
return 0;
}