Cod sursa(job #146460)

Utilizator a7893Nae Mihai a7893 Data 1 martie 2008 19:01:52
Problema Zvon Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#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);
		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;
}