Cod sursa(job #106580)

Utilizator tvladTataranu Vlad tvlad Data 18 noiembrie 2007 19:26:23
Problema Zvon Scor 0
Compilator cpp Status done
Runda Happy Coding 2007 Marime 1.13 kb
#include <cstdio>
#include <algorithm>
#include <vector>
#include <queue>
using namespace std;

const int N = 100000;

int n;
vector<int> v[N];
int dim[N],d[N];

bool dcmp ( const int& a, const int& b ) { return (dim[a] > dim[b]); }

void df ( int k ) {
	dim[k] = 1;
	for (int i = 0; i<v[k].size(); ++i) {
		df(v[k][i]);
		dim[k] += dim[v[k][i]];
	}
	printf("Dimensiunea subarborelui %d este de %d\n",k,dim[k]);
}

void bf() {
	queue<int> q;
	int cur = 0;
	q.push(cur); d[cur] = 0;
	while (!q.empty()) {
		cur = q.front(); q.pop();
		for (int i = 0; i < v[cur].size(); ++i) {
			d[v[cur][i]] = d[cur] + i + 1;
			q.push(v[cur][i]);
		}
	}
}

int main() {
	freopen("zvon.in","rt",stdin);
	freopen("zvon.out","wt",stdout);
	int t;
	for (scanf("%d",&t); t > 0; --t) {
		scanf("%d",&n);
		for (int i = 0; i<N; ++i) {
			v[i].clear();
			d[i] = 0;
		}
		for (int i = 0; i < n-1; ++i) {
			int a,b;
			scanf("%d %d",&a,&b);
			--a; --b;
			v[a].push_back(b);
		}
		df(0);
		for (int i = 0; i<n; ++i) sort(v[i].begin(), v[i].end(), dcmp);
		bf();
		int max = 0;
		for (int i = 0; i<n; ++i)
			if (d[i] > max) max = d[i];
		printf("%d\n",max);
	}
	return 0;
}