Cod sursa(job #719130)

Utilizator Catah15Catalin Haidau Catah15 Data 21 martie 2012 14:48:05
Problema Zvon Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <string>
#include <vector>

using namespace std;

#define maxN 100010
#define PB push_back

int COST[maxN], sol[maxN], ans;
vector <int> list[maxN];


inline int cmp (int i, int j)
{
	return COST[i] > COST[j];
}


void Get_Lists (int k)
{
	for (int i = 0; i <= k + 1; i ++ ) list[i].clear();
	
	for (int i = 1, a, b; i <= k; ++ i)
	{
		scanf ("%d %d", &a, &b);
		list[a].PB (b);
	}
}


void DFS (int nod)
{	
	COST[nod] = 1;
	
	for (unsigned int i = 0; i < list[nod].size(); ++ i)
	{
		int nod2 = list[nod][i];
		
		DFS (nod2);
		
		COST[nod] += COST[nod2];
	}
	
	sort (list[nod].begin(), list[nod].end(), cmp);
}


void DFS2 (int nod)
{
	ans = max (ans, sol[nod]);
	
	for (unsigned int i = 0; i < list[nod].size(); ++ i)
	{
		int nod2 = list[nod][i];
		
		sol[nod2] = sol[nod] + i + 1;
		
		DFS2 (nod2);
	}
}


int main()
{
	freopen ("zvon.in", "r", stdin);
	freopen ("zvon.out", "w", stdout);
	
	int T;
	
	scanf ("%d", &T);
	
	while (T --)
	{
		int N;
		ans = 0;
		
		scanf ("%d", &N);
		
		Get_Lists (N - 1);
		
		DFS (1);
		DFS2 (1);
		
		printf ("%d\n", ans);
	}
	
	return 0;
}