Cod sursa(job #101234)

Utilizator snaked31Stanica Andrei snaked31 Data 13 noiembrie 2007 10:38:37
Problema Zvon Scor 0
Compilator cpp Status done
Runda Happy Coding 2007 Marime 1.03 kb
#include <stdio.h>
#include <algorithm>
#include <vector>

using namespace std;

#define nm 100010

int n, i, x, y, sol;
int a[nm];
vector <int> v[nm];

void read()

{
	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].push_back(y);
	}
}


void dfs(int p)

{
	int i, mx = 0, pmx = 0;
	if (v[p].size() == 0)
	{
		a[p] = 0;
	}
	for (i=0; i<v[p].size(); ++i)
	{
		dfs(v[p][i]);
		if (mx == a[v[p][i]])
			pmx ++;
		if (mx < a[v[p][i]])
		{
			mx = a[v[p][i]];
			pmx = 1;
		}
	}
	if (v[p].size() != 0)
	{
		a[p] = mx + v[p].size()-1;
		if (pmx > 1)
		{
			a[p] = mx + v[p].size()-1 + 1;
		}
		if (mx == 0)
			a[p] = v[p].size();
		if (v[p].size() == 1)
		{
			a[p] = mx + 1;
		}
	}
}


void solve()

{
	for (i=1; i<=n; ++i)
	{
		a[i] = 0;
	}
	dfs(1);
	sol = a[1];
}


void write()

{
	printf("%d\n", sol);
}


int main()

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

	int T;

	scanf("%d ", &T);

	for (; T>0; --T)
	{
		read();
		solve();
		write();
	}

	return 0;
}