Cod sursa(job #106935)

Utilizator coderninuHasna Robert coderninu Data 19 noiembrie 2007 00:11:51
Problema Zvon Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.33 kb
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <algorithm>


#define Nmax 100001

using namespace std;


int t;
long n, i, Rez, nrd;
vector < long > gr[Nmax];
vector < long > d[Nmax];

void readNext();
void stergeVect();
long rez(long);
inline long max(long x, long y) { return x>y?x:y; }


int main()
{
	freopen("zvon.in", "r", stdin);
	freopen("zvon.out", "w", stdout);
	scanf("%d\n", &t);
	for (int I=1; I<=t; I++)
	{
		readNext();
                Rez=rez(1);
		printf("%ld\n", Rez);
		stergeVect();
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}

void readNext()
{
	long x, y;
	scanf("%ld\n", &n);
	for (i=1; i<n; i++)
	{
		scanf("%ld %ld\n", &x, &y);
        	gr[x].push_back(y);
	}
}

void stergeVect()
{
	for (i=1; i<=n; i++)
                gr[i].erase(gr[i].begin(), gr[i].end());
}

long rez(long x)
{
	long temp=0, maxim=0, i;
	if (!gr[x].size()) return 0;
	else
	{
                nrd++;
                temp=gr[x].size();
                for (i=0; i<temp; i++)
			d[nrd].push_back(rez(gr[x][i]));
		sort(d[nrd].begin(),d[nrd].end());
                temp=d[nrd].size();
                for (i=1; i<=temp; i++)
			maxim=max(maxim,d[nrd][i-1]+temp-i+1);
		d[nrd].erase(d[nrd].begin(),d[nrd].end());
                nrd--;
                return maxim;
	}
}