Cod sursa(job #102868)

Utilizator coderninuHasna Robert coderninu Data 14 noiembrie 2007 19:12:02
Problema Zvon Scor 0
Compilator cpp Status done
Runda Happy Coding 2007 Marime 1.95 kb
#include <stdio.h>
#include <stdlib.h>
#include <vector>
#include <algorithm>


#define Nmax 100001

using namespace std;


//struct nod { long inf; struct nod * urm;};
//typedef nod * list;

int t;
long rad, n, i, Rez;
short radPos[Nmax];
vector < long > gr[Nmax];
//long * d[Nmax];
//long nrd=0;
long nrFii[Nmax];

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


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(rad);
		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);
		radPos[y]=1;
	}
	for (i=1; i<=n & radPos[i]; i++);
	rad=i;
}

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

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

/*long divide(long p, long q)
{
	long st=p, dr=q, x=d[nrd][p];
	while (st < dr)
	{
		while ( st<dr && d[nrd][dr]>=x ) dr--;
		d[nrd][st]=d[nrd][dr];
		while ( st<dr && d[nrd][st]<=x ) st++;
		d[nrd][dr]=d[nrd][st];
	}
	d[nrd][st]=x;
	return st;
}

void qSort(long p, long q)
{
	long m=divide(p,q);
	if (m-1>p) qSort(p, m-1);
	if (m+1<q) qSort(m+1, q);
}*/