Cod sursa(job #107838)

Utilizator IgnitionMihai Moraru Ignition Data 20 noiembrie 2007 16:16:48
Problema Zvon Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <stdio.h>
#include <string.h>
#include <vector>
#include <algorithm>

using namespace std;

#define MN (100009)
#define pb push_back

vector<int> g[MN];
int cc[MN];

int c(int);

struct comp {
	bool operator()(int i, int j)
	{
		return c(i) < c(j);
	}
};

int c(int n)
{
	if(cc[n] >= 0)
		return cc[n];
	vector<int> sub(g[n]);
	sort(sub.begin(), sub.end(), comp());
	int i, sz = sub.size(), max = 0, tmp;
	for(i = 0; i < sz; ++i) {
		tmp = c(sub[i])+sz-i;
		if(tmp > max)
			max = tmp;
	}
	return cc[n] = max;
}

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

	int T, N, i;

	for(scanf("%d", &T); T > 0; --T) {
		scanf("%d", &N);
		for(i = 0; i < N; ++i)
			g[i].clear();
		memset(cc, -1, N*sizeof(cc[0]));
		for(i = 1; i < N; ++i) {
			int a, b;
			scanf("%d %d", &a, &b);
			--a; --b;
			g[a].pb(b);
		}

		/*
		printf("Dump\n");
		for(i = 0; i < N; ++i) {
			printf("%d:", i+1);
			for(j = 0; j < g[i].size(); ++j)
				printf(" %d", g[i][j]+1);
			printf("\n");
		}
		*/

		printf("%d\n", c(0));
	}

	return 0;
}