Cod sursa(job #98726)

Utilizator bogdan2412Bogdan-Cristian Tataroiu bogdan2412 Data 10 noiembrie 2007 16:16:55
Problema Zvon Scor 100
Compilator cpp Status done
Runda Happy Coding 2007 Marime 1 kb
#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

#define MAXN 100005

vector<int> con[MAXN];
int N, p[MAXN], root;

int bst[MAXN];

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

void dfs( int k )
{
	if (con[k].empty())
	{
		bst[k] = 0;
		return;
	}

	vector<int> :: iterator it;
	for (it = con[k].begin(); it != con[k].end(); it++)
		dfs( *it );

	sort( con[k].begin(), con[k].end(), cmp );

	bst[k] = 0;
	int time = 0;
	for (it = con[k].begin(); it != con[k].end(); it++, time++)
		bst[k] = max( bst[k], bst[*it] + time );

	bst[k]++;
}

int main()
{
	freopen("zvon.in", "rt", stdin);
	freopen("zvon.out", "wt", stdout);

	int T;
	for (scanf("%d", &T); T; T--)
	{
		scanf("%d", &N);
		for (int i = 1; i <= N; i++)
			con[i].clear(), p[i] = 0;

		for (int k = 1; k < N; k++)
		{
			int a, b;
			scanf("%d %d", &a, &b);
			con[a].push_back(b); p[b] = a;
		}

		for (int i = 1; i <= N; i++)
			if (p[i] == 0)
				root = i;

		dfs(root);
		printf("%d\n", bst[root]);
	}

	return 0;
}