Cod sursa(job #309104)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 29 aprilie 2009 18:27:24
Problema Zvon Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.24 kb
#include <cstdio>
#include <algorithm>
#include <vector>

using namespace std;


#define file_in "zvon.in"
#define file_out "zvon.out"

#define Nmax 100100

#define pb push_back
#define sz size
#define Clear(a) memset(a,0,sizeof(a))

int n,T;
vector<int> v[Nmax];
int viz[Nmax];
int sol[Nmax];
int x,y;
vector<int> v1;

inline int max(int a, int b)
{
	if (a>b) return a;
	return b;
}

inline int cmp(int a, int b)
{
	return a>b;
}

void dfs(int nod)
{
	int i;
		
	for (i=1;i<=n;++i)
		 v1.clear();
	
	viz[nod]=1;
	for (i=0;i<v[nod].sz();++i)
	{
	     if (!viz[v[nod][i]])
		 {	
			dfs(v[nod][i]);
			v1.pb(sol[v[nod][i]]);
		 }
	}
	sort(v1.begin(),v1.end(),cmp);
	sol[nod]=0;
	for (i=0;i<v1.sz();++i)
	     sol[nod]=max(sol[nod],v1[i]+i+1);
}
	


int main()
{
	int i;
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d", &T);
	
	while(T--)
	{
		scanf("%d", &n);
	    
		for(i=1;i<=n;++i) 
			 v[i].clear();   

		for (i=1;i<n;++i)
		{
			scanf("%d %d", &x, &y);
			v[x].pb(y);
		}
		
        Clear(viz); 
		
		dfs(1);
		if (sol[1]==0) printf("%d\n", sol[1]);
		          else printf("%d\n", sol[1]+1); 
	}
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
}