Cod sursa(job #103435)

Utilizator damaDamaschin Mihai dama Data 15 noiembrie 2007 12:32:59
Problema Zvon Scor 0
Compilator cpp Status done
Runda Happy Coding 2007 Marime 0.88 kb
#include <stdio.h>
#include <vector>
#include <algorithm>

const int nmax = 100002;

using namespace std;

vector<int> v[nmax];
int c[nmax], vec[nmax];

void dfs(int nod);

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

	int t, test, n, i, a, b;

	scanf("%d", &t);

	for(test = 0; test < t; ++test)
	{
		scanf("%d", &n);

		for(i = 1; i < n; ++i)
		{
			scanf("%d %d", &a, &b);
			v[a].push_back(b);
		}

		dfs(1);
		printf("%d\n", c[1] - 1);
		for(i = 1; i <= n; ++i)
		{
			vector<int> ().swap(v[i]);
		}
	}

	return 0;
}

void dfs(int nod)
{
	int i, sz = v[nod].size(), cnt = 0, min = 1000000;
	c[nod] = 1;

	for(i = 0; i < sz; ++i)
	{
		dfs(v[nod][i]);
		vec[++cnt] = c[v[nod][i]];
	}
	sort(vec + 1, vec + cnt + 1);
	for(i = 1; i <= cnt; ++i)
	{
		vec[i] += cnt - i + 1;
		if(min > vec[i])
		{
			min = vec[i];
		}
	}
	if(min != 1000000)
		c[nod] += min;
}