Cod sursa(job #481998)

Utilizator nandoLicker Nandor nando Data 2 septembrie 2010 12:20:46
Problema Zvon Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;

FILE* fin = fopen("zvon.in", "r");
FILE* fout = fopen("zvon.out", "w");

#define MAX(a,b) (((a) > (b)) ? (a) : (b));

#define MAXN 100050

vector<int> f[MAXN];
typedef vector<int>::iterator iter;
typedef vector<int>::reverse_iterator riter;

int doComp(int n){
	vector<int> tv;
	for(iter it = f[n].begin(); it != f[n].end(); ++it){
		tv.push_back(doComp(*it));
	}
	if(tv.empty()){
		return 0;
	}
	
	sort(tv.begin(), tv.end());
	int mv = 0, i = 1;

	for(riter it = tv.rbegin(); it != tv.rend(); ++it, ++i){
		mv = MAX(mv, *it + i);
	}
	return mv;	
}

int doTest(){
	int n;
	fscanf(fin, "%d ", &n);
	for(int i = 1; i <= n; ++i){
		f[i].clear();
	}

	for(int i = 0, x, y; i < n-1; ++i){
		fscanf(fin, "%d %d\n", &x, &y);
		f[x].push_back(y);
	}

	return doComp(1);

}

int main(){
	int t;
	fscanf(fin, "%d\n", &t);
	while(t--){
		fprintf(fout, "%d\n", doTest());
	}	
	fclose(fin);
	fclose(fout);
	return EXIT_SUCCESS;
}