Cod sursa(job #105703)

Utilizator maria_pparcalabescu maria daniela maria_p Data 17 noiembrie 2007 21:09:45
Problema Zvon Scor 100
Compilator cpp Status done
Runda Happy Coding 2007 Marime 0.87 kb
#include<cstdio>
#include <cstring>
#include<algorithm>

#define lung 100010

struct celula{
	long inf;
	celula *leg;
} *a[lung], *p;
long i,test,k,n,x,y,b[lung];

bool desc(long a,long b){
	return a>b;
}

long df(long x){
	long m=0,q=0,k;
	long t[b[x]+1];
	memset(t,0,sizeof(t));
	celula *p;
	p=a[x];
	while(p!=0){
		t[q++]=df(p->inf);
		p=p->leg;
	}
	std::sort(t,t+q,desc); 
	for(k=0;k<q;k++) {
		if(t[k]+k+1>m)m=t[k]+k+1;
	}
	return m;
}

int main(){
	freopen("zvon.in","r",stdin);
	freopen("zvon.out","w",stdout);
	scanf("%ld",&test);
	for(i=0;i<test;i++){
		scanf("%ld",&n);
		for(k=0;k<n-1;k++){
			scanf("%ld%ld",&x,&y);
			p=new celula;
			p->inf=y;p->leg=a[x];a[x]=p;b[x]++;
		}
		printf("%ld\n",df(1));
		for(k=1;k<=n;k++) {
			for (; a[k];) {
				p = a[k];
				a[k] = a[k]->leg;
				delete p;
			}
		}
		memset(b,0,sizeof(b));
	}
	fclose(stdin);
	fclose(stdout);
	return 0;
}