Cod sursa(job #146462)

Utilizator roquerMarinescu Liana roquer Data 1 martie 2008 19:06:20
Problema Zvon Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<stdio.h>
#include<stdlib.h>
#define N 100000
int t,n,i,j,sub[N],sef,ang,s[N];
int *a[N];
struct structura
{
	int x,y;
}v[N];
void read_un_test()
{
	int aa,bb,i;
	scanf("%d",&n);
	for(i=1;i<n;++i)
		{
			scanf("%d%d",&aa,&bb);
			sub[aa]++;
			v[i].x=aa;
			v[i].y=bb;
		}
	for(i=1;i<=n;++i)
	{
		a[i]=new int[sub[i]+1];
		a[i][0]=0;
	}
	for(i=1;i<n;++i)
	{
		sef=v[i].x;
		ang=v[i].y;
		a[sef][++a[sef][0]]=ang;
	}
}
void df(int x)
{
	for(int i=1;i<=a[x][0];++i)
	{
		df(a[x][i]);
		s[x]+=s[a[x][i]];
	}
	++s[x];
}
int comp(const void *a,const void *b){
	return -s[*(int*)a]+s[*(int*)b];
}
int f(int x){
	int max=0,y;
	for(int i=1;i<=a[x][0];++i){
		y=f(a[x][i]);
		if(i+y>max)
			max=i+y;
	}
	return max;
}
void solve_un_test()
{
	df(1);
	for(int i=1;i<=n;++i)
		qsort(a[i]+1,a[i][0],sizeof(a[i][0]),comp);
	printf("%d\n",f(1));
}
void solve()
{
	scanf("%d",&t);
	for(int i=1;i<=t;++i)
	{
		read_un_test();
		solve_un_test();
		for(int j=1;j<=n;++j)
			delete a[j];
	}
}
int main(){
	freopen("zvon.in","r",stdin);
	freopen("zvon.out","w",stdout);
	solve();
	return 0;
}