Pagini recente » Cod sursa (job #2364146) | Cod sursa (job #2077014) | Cod sursa (job #1765729) | Cod sursa (job #402640) | Cod sursa (job #157215)
Cod sursa(job #157215)
# include <stdio.h>
# include <values.h>
typedef struct nod {
int key;
nod *next;
};
nod *a[200];
int n;
int calc (int n)
{
int grad[200];
if ( a[n] == NULL )
return 0;
else
{
int nr = -1;
for ( nod *q = a[n]; q; q=q->next )
grad[++nr] = calc ( q->key );
int 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;
}
}
int 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 ( int x, int 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\n", &t );
for ( int i = 0; i < t; ++ i )
{
scanf ( "%d\n", &n );
if ( n == 1 )
{
printf ( "0\n" );
scanf ( "\n" );
}
else
{ int x,y;
for ( int j = 0; j < n-1; ++ j )
{
scanf ( "%d %d", &x, &y );
add ( x, y );
}
printf ( "%d\n", calc ( 1 ) );
}
for ( int i = 0; i < n; ++ i )
a[i] = NULL;
}
fclose ( stdout ); fclose ( stdin );
}
int main ()
{
cit ();
return 0;
}