Cod sursa(job #557300)

Utilizator cristiprgPrigoana Cristian cristiprg Data 16 martie 2011 16:01:21
Problema Zvon Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <cstdio>
#include <vector>
#include <algorithm>
#include <bitset>
using namespace std;
#define DIM 100005
#define pb push_back
#define IT vector<int>::iterator
FILE *f = fopen("zvon.in", "r"), *fout = fopen("zvon.out", "w");
vector<int>G[DIM];
bitset<DIM>v(0);
int arb[DIM], n, T, adancime[DIM], cost[DIM];

void read()
{
		
	fscanf(f, "%d", &n);
	
	for (int i = 1; i <= n; ++i)
		v[i] = 0, cost[i] = 0, adancime[i] = 0, G[i].clear();
	
	for (int i = 1, x, y; i < n; ++i)
		fscanf(f, "%d%d", &x, &y), G[x].pb(y);
}

void DFS(int i, int a)
{
	v[i] = 1;
	adancime[i] = a;
	for (IT it = G[i].begin(); it != G[i].end(); ++it)
		if (!v[*it])
			DFS(*it, a+1);
}

bool cmp(int i, int j)
{
	return adancime[i] > adancime[j];
}

bool cmp2(int i, int j)
{
	return cost[i]>cost[j];
}



void solve()
{
	read();
	if (n == 1)
	{
		fprintf(fout, "0\n");
		return;
	}
	
	DFS(1,0);
	for (int i = 1; i <= n; ++i)
		arb[i] = i;
	
	sort(arb+1, arb+n+1, cmp);
	int i;


	for (i = 1;i <= n; ++i)
	{
		sort(G[ arb[i] ].begin(), G[ arb[i] ].end(), cmp2);
	/*	
		printf("%d: ", arb[i]);
		for (IT it = G[ arb[i] ].begin(); it != G[ arb[i] ].end(); ++it)	printf("(%d %d)", *it, cost[*it]);
		printf("\n");
	*/	
		int j = 1, max = 0;
		for (IT it = G[ arb[i] ].begin(); it != G[ arb[i] ].end(); ++it, ++j)
			if (max < j + cost[ *it ])
				max = j + cost[ *it ];
		cost[arb[i]] = max;
		printf("cost[%d] = %d\n",arb[i], max );
	}
	
	fprintf(fout,"%d\n", cost[1]);
	
}

int main()
{	
	fscanf(f, "%d", &T);
	for (int t = 1; t <= T; ++t)
		solve();
	return 0;
}