Cod sursa(job #102611)

Utilizator ViksenVictor-Nicolae Savu Viksen Data 14 noiembrie 2007 16:23:47
Problema Zvon Scor 0
Compilator cpp Status done
Runda Happy Coding 2007 Marime 1.06 kb
#include <stdio.h>
#include <string.h>

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;
}

int Df ( int x )
{
    int v,min=0x3f3f3f,max=0;
    if ( G[x] == 0 ) min =0;
    for ( point *p=G[x] ; p ; p=p->l ) {
        v = Df (p->v);
        if ( v>max ) max=v;
        if ( v<min ) min=v;
    }
    return (max+1>min+F[x])?(max+1):(min+F[x]);
}

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