Cod sursa(job #100986)

Utilizator ProstuStefan-Alexandru Filip Prostu Data 12 noiembrie 2007 21:25:18
Problema Zvon Scor 100
Compilator cpp Status done
Runda Happy Coding 2007 Marime 0.91 kb
#include <cstdio>
#include <vector>
#include <algorithm>

using namespace std;

#define PB push_back

const int NMAX = 1 << 17;

int N;
vector <int> G[NMAX], T[NMAX];

int DFS(int k) {
	int i, ret = 0;

	for (i = 0; i < (int) G[k].size(); ++i)
		T[k].PB( DFS(G[k][i]) );
	
	sort(T[k].begin(), T[k].end());

//	printf("%u %u\n", T[k].size(), G[k].size());

	for (i = 0; i < (int) T[k].size(); ++i)
		ret = max(ret, T[k][i] + ((int)T[k].size() - i));
	
	return ret;
}

int main(void) {
	FILE *fin = fopen("zvon.in", "rt");
	FILE *fout = fopen("zvon.out", "wt");
	int test, i, u, v;

	fscanf(fin, " %d", &test);

	while (test--) {
		fscanf(fin, " %d", &N);

		for (i = 1; i < N; ++i) {
			fscanf(fin, " %d %d", &u, &v);
			G[u].PB(v);
		}

		fprintf(fout, "%d\n", DFS(1));
		
		for (i = 0; i < N; ++i)
			if (!G[i].empty())
				vector<int>().swap(G[i]),
				vector<int>().swap(T[i]);
	}

	fclose(fin);
	fclose(fout);

	return 0;
}