Pagini recente » Cod sursa (job #1435668) | Cod sursa (job #1114722) | Cod sursa (job #1047972) | Cod sursa (job #2298808) | Cod sursa (job #157300)
Cod sursa(job #157300)
# include <stdio.h>
# include <values.h>
typedef struct nod {
long key;
nod *next;
};
nod *a[100010];
long n;
long calc (long n)
{
long grad[100010];
if ( a[n] == NULL )
return 0;
else
{
long nr = -1;
for ( nod *q = a[n]; q; q=q->next )
grad[++nr] = calc ( q->key );
long mij ,i,j,aux,st=0,dr=nr;
int ok=1;
while (ok)
{
i = st; j = dr;
ok = 0; mij = (dr + st )/2;
do
{
while ( grad[i] < grad[mij] ) ++i;
while ( grad[j] > grad[mij] ) --j;
if ( i <= j )
{
aux = grad[i];
grad[i] = grad[j];
grad[j] = aux;
++i;--j;
}
}
while ( i < j );
if ( st < j )
{
dr = j;
ok = 1;
}
if ( dr > i )
{
st = i;
ok = 1;
}
}
long maxim = 0;
for ( i = 0; i <= nr; ++ i )
if ( maxim < grad[i]+nr-i+1 )
maxim = grad[i]+nr-i+1;
return maxim;
}
}
void add ( long x, long y )
{
nod *p;
p = new nod;
p->key = y;
p->next = a[x];
a[x] = p;
}
void cit ()
{
int t;
freopen ( "zvon.in", "r", stdin ); freopen ( "zvon.out", "w", stdout );
scanf ( "%d", &t );
for ( int i = 0; i < t; ++ i )
{
scanf ( "%ld", &n );
if ( n == 1 )
printf ( "0\n" );
else
{ long x,y;
for ( long j = 0; j < n-1; ++ j )
{
scanf ( "%ld %ld", &x, &y );
add ( x, y );
}
printf ( "%ld\n", calc ( 1 ) );
}
for ( long k = 0; k < n; ++ k )
a[k] = NULL;
}
fclose ( stdout ); fclose ( stdin );
}
int main ()
{
cit ();
return 0;
}