Cod sursa(job #99675)

Utilizator peanutzAndrei Homorodean peanutz Data 11 noiembrie 2007 14:51:50
Problema Zvon Scor 0
Compilator cpp Status done
Runda Happy Coding 2007 Marime 1.4 kb
#include <stdio.h>
#include <string.h>
#include <algorithm>
#include <vector>

using namespace std;

#define pb push_back
#define NMAX 100010
#define MP make_pair
#define sz size()
#define ss second 
#define ff first

int n;
vector<int> list[NMAX];
int niv[NMAX];
int _max = 0;

inline int MAX(int a, int b) { return (a > b) ? (a) : (b); }

void read()
{
	scanf("%d", &n);
	for(int i = 1, x, y; i < n; ++i)
	{
		scanf("%d %d\n", &x, &y);
		list[x].pb(y);
	}
}	

void fdf(int x)
{
	if(!list[x].sz)
	{
		niv[x] = 1;
		return ;
	}
	for(vector<int> :: iterator it = list[x].begin(); it != list[x].end(); ++it)
	{
		fdf(*it);
		niv[x] = MAX(niv[x], niv[*it]+1);
	}
}

void df(int x, int t)
{
	if(!list[x].sz)
	{
		_max = MAX(_max, t);
		return ;
	}
	vector< pair<int, int> > v;
	for(vector<int> :: iterator it = list[x].begin(); it != list[x].end(); ++it)
		v.pb( MP(niv[*it], *it) );
	sort(v.begin(), v.end());
	
	for(int i = v.sz-1; i >= 0; --i)
	{
		df(v[i].ss, ++t);
	}
}	

int main()
{
	freopen("zvon.in", "r", stdin);
	freopen("zvon.out", "w", stdout);

	int nr;
	for(scanf("%d", &nr); nr; --nr)
	{

		read();

		fdf(1);
		df(1, 0);

		printf("%d\n", _max);

		memset(niv, 0, sizeof(niv));
		for(int i = 1; i <= n; ++i)
			list[i].clear();
		_max = 0;
	}
	return 0;
}