Cod sursa(job #102448)

Utilizator scvalexAlexandru Scvortov scvalex Data 14 noiembrie 2007 13:44:51
Problema Zvon Scor 100
Compilator cpp Status done
Runda Happy Coding 2007 Marime 1.13 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

class Nod {
public:
	Nod() :
		val(0)
	{
	}

	vector< Nod* > c;
	int val;
};

int n;
vector<Nod> noduri;

void calculeaza_valori(Nod *n) {
	if (0 == (int)n->c.size())
		return;

	vector<int> v;
	for (int i(0); i < (int)n->c.size(); ++i) {
		calculeaza_valori(n->c[i]);
		v.push_back(n->c[i]->val);
	}

	sort(v.begin(), v.end());
	reverse(v.begin(), v.end());

	int cur = v[0];
	int tot = cur + 1;
	for (int i(1); i < (int)v.size(); ++i, --cur)
		if (cur == v[i]) {
			++tot;
			++cur;
		}

	n->val = tot;
}

int main(int argc, char *argv[]) {
	ifstream fin("zvon.in");
	int T;
	fin >> T;

	ofstream fout("zvon.out");
	for (int t(0); t < T; ++t) {
		fin >> n;
		noduri.clear();
		noduri.insert(noduri.begin(), n, Nod());

		int a, b;
		for (int i(0); i < n - 1; ++i) {
			fin >> a >> b;
			noduri[a - 1].c.push_back(&noduri[b - 1]);
		}

		calculeaza_valori(&noduri[0]);

// 		for (int i(0); i < n; ++i)
// 			cout << i << ": " << noduri[i].val << endl;
// 		cout << endl;
		fout << noduri[0].val << endl;
	}
	fout.close();

	fin.close();

	return 0;
}