Cod sursa(job #193607)

Utilizator andrei-alphaAndrei-Bogdan Antonescu andrei-alpha Data 5 iunie 2008 13:20:57
Problema Zvon Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <cstdio>
#include <vector>
#include <algorithm>
#define IN "zvon.in"
#define OUT "zvon.out"
#define N_MAX 100001
#define pb push_back

using namespace std;
int T[N_MAX];
int n,teste;

vector< vector<int> > a(N_MAX);  

bool comp (const int x, const int y) 
{
	if(T[x]>T[y])
		return 1;
	return 0;
}

void scan()
{
	freopen(IN, "r",stdin);
	freopen(OUT, "w",stdout);
	scanf("%d", &teste);
}

void df(int x)
{
	int y;
	int l=a[x].size();  
	for(int i=0;i<l;++i)
	{
		y=a[x][i];
		df(y);
	}
	l=a[x].size();  
	sort(a[x].begin(),a[x].end(), comp);
	for(int i=0;i<l;++i)
	{
		y=a[x][i];
		T[x]=max(T[x],i+1+T[y]);
	}
}	

void solve()
{
	for(int ti=1;ti<=teste;++ti)
	{
		int x,y;
		scanf("%d", &n);
		for(int i=1;i<=n;++i)
			T[i]=0;
		for(int i=1;i<n;++i)
		{
			scanf("%d%d", &x,&y);
			a[x].pb(y);
		}
		df(1);
		/*
		for(int i=1;i<=n;++i)
		{
			int l=a[x].size(); 
			for(int j=0;j<l;++j)
				printf("%d ",a[i][j]);
			printf("\n");
		}
		*/
		for(int i=1;i<=n;++i)
			a[i].erase(a[i].begin(),a[i].end());
		printf("%d\n",T[1]);
	}	
}

int main()
{
	scan();
	solve();
	return 0;
}