Cod sursa(job #134698)

Utilizator ViksenVictor-Nicolae Savu Viksen Data 12 februarie 2008 08:06:47
Problema Zvon Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <stdio.h>
#include <string.h>
#include <algorithm>
using namespace std;

struct point { int v; point *l; } *G[100000];
int F[100000], n;

void ReadTest ()
{
    int i,x,y;
    point *p;
    scanf ( "%d" , &n );
    for ( i=1 ; i<n ; i++ ) {
        scanf ( "%d %d" , &x , &y );
        p = new point;
        p->v = y-1;
        p->l = G[x-1];
        G[x-1]=p;
        F[x-1]++;
    }
}

void CleanUp ()
{
    memset ( F , 0 , n*sizeof ( int ) );
    memset ( G , 0 , n*sizeof ( point * ) );
    n=0;
}

bool cmp ( int x , int y ) { return x>y; }

int Df ( int x )
{
 	if ( G[x]==0 ) return 1;
    int v[F[x]],i=0;

    for ( point *p=G[x] ; p ; p=p->l ) v[i++] = Df (p->v);
	sort ( v, v+F[x] , cmp );
    v[0]++;
    for ( i=1 ; i<F[x] ; i++ )
       if ( v[0]<v[i]+i+1 ) v[0]=v[i]+i+1;
    return v[0];
}

int main ()
{
    int t;
    freopen ( "zvon.in" , "r" , stdin );
    freopen ( "zvon.out" , "w" , stdout );
    for ( scanf ( "%d" , &t ); t ; t-- ) {
        ReadTest ();
        printf ( "%d\n" , Df (0)-1 );
        CleanUp ();
    }
    fclose ( stdin );
    fclose ( stdout );
    return 0;
}