Cod sursa(job #145621)

Utilizator a7893Nae Mihai a7893 Data 29 februarie 2008 08:50:38
Problema Zvon Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.02 kb
#include<stdio.h>
#define N 50000
int t,n,niv[N],*a[N],ta[N],tmin[N],max,viz[N];
struct vec{
	int x,y;
}v[N];
void df(int nod)
{
	int i;
	viz[nod]=1;
	for(i=1;i<=a[nod][0];i++)
		if(!viz[a[nod][i]])
		{
			viz[a[nod][i]]=1;
			df(a[nod][i]);
		}
		else
			tmin[nod]=1+tmin[a[nod][i]];
}
void read_solve()
{
	int i1,i;
	scanf("%d",&t);
	for(i1=1;i1<=t;i1++)
	{
		scanf("%d",&n);
		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]++;
			niv[v[i].y]++;
			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;
			a[v[i].y][++a[v[i].y][0]]=v[i].y;
		}
		for(i=1;i<=n;i++)
			if(ta[i]==0)
				df(i);
		max=tmin[1]+1;
		for(i=2;i<=n;i++)
			if(tmin[i]+1>max)
				max=tmin[i]+1;
		printf("%d\n",max);
	}
}
int main()
{
	freopen("zvon.in","r",stdin);
	freopen("zvon.out","w",stdout);
	read_solve();
	return 0;
}