Pagini recente » Cod sursa (job #1123221) | Cod sursa (job #790178) | Cod sursa (job #1207128) | Cod sursa (job #889790) | Cod sursa (job #189166)
Cod sursa(job #189166)
#include<stdio.h>
#include<iostream.h>
#include<string.h>
#include<stdlib.h>
#define NMAX 101001
struct lista { int val; lista *last; } *p[NMAX];
int t,n, d[NMAX],sub[NMAX];
int inline cmp(const void *a, const void *b)
{
return ( *(int*)b - *(int*)a );
}
void init();
void go(int x);
int main()
{
freopen("zvon.in","r",stdin);
freopen("zvon.out","w",stdout);
scanf("%d",&t);
while(t--)
{
init();
go(1);
printf("%d\n",d[1]);
}
printf("\n"); return 0;
}
void init()
{
scanf("%d",&n);
int var1,var2,i; lista *p2;
memset(p,0, (n+1)*sizeof(lista) ); memset(d,0, (n+1)*sizeof(int) );
for(i=1; i<n; i++)
{
scanf("%d %d",&var1,&var2);
p2=new lista;
p2->last=p[var1];
p2->val=var2;
p[var1]=p2;
}
}
void go(int x)
{
lista *p2=p[x];
while(p2!=NULL) { go(p2->val); p2=p2->last; }
int k=0,max=0; p2=p[x];
while(p2!=NULL) { sub[++k]=d[p2->val]; p2=p2->last; }
qsort(sub+1,k,sizeof(int),cmp);
for(; k>0; k--)
{ sub[k]+=(k+1); if(sub[k]>max) max=sub[k]; }
d[x]=max;
}