Pagini recente » Cod sursa (job #1306019) | Cod sursa (job #502170) | Cod sursa (job #2475632) | Cod sursa (job #2354576) | Cod sursa (job #157963)
Cod sursa(job #157963)
# include <stdio.h>
# include <values.h>
typedef struct nod {
long key;
nod *next;
};
nod *a[100010];
long n, grad[100010],t[100010];
void calc (long n)
{
if ( a[n] == NULL )
t[n] = 0;
else
{
for ( nod *q = a[n]; q; q=q->next )
calc ( q->key );
int nr = -1;
for ( nod *w = a[n]; w; w=w->next )
grad[++nr] = t[w->key];
if (nr > 0)
{
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;
}
}
}
t[n] = 0;
long maxim = 0;
for (int i = 0; i <= nr; ++ i )
if ( maxim < grad[i]+nr-i+1 )
maxim = grad[i]+nr-i+1;
t[n] = 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 m;
freopen ( "zvon.in", "r", stdin ); freopen ( "zvon.out", "w", stdout );
scanf ( "%d", &m );
for ( int i = 0; i < m; ++ 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 );
}
calc(1);
printf ( "%ld\n", t[1] );
}
for ( long k = 0; k <= n; ++ k )
a[k] = NULL;
}
fclose ( stdout ); fclose ( stdin );
}
int main ()
{
cit ();
return 0;
}