Cod sursa(job #102779)

Utilizator ZeusCatalin Tiseanu Zeus Data 14 noiembrie 2007 18:13:45
Problema Zvon Scor 100
Compilator cpp Status done
Runda Happy Coding 2007 Marime 1.28 kb

#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>

using namespace std;

int dp[100100], p[100100], deg[100100];
vector<int> at[100100], g[100100];

void df( int x )
{
    dp[x] = 0;
    
    for( int i = 0; i < deg[x]; ++i )
         df( g[x][i] ), at[x][i] = dp[ g[x][i] ];
         
    sort( at[x].begin(), at[x].end() );
    
    for( int i = 0; i < deg[x]; i++ )
         if( at[x][i] + deg[x] - i > dp[x] )
             dp[x] = at[x][i] + deg[x] - i;        
}

int main()
{
    freopen("zvon.in", "r", stdin);
    freopen("zvon.out", "w", stdout);
    
    int T, N;
    
    for( scanf("%d", &T); T--; )
    {
         memset( deg, 0, sizeof( deg ) );
         
         scanf("%d", &N);
         
         for( int i = 1; i <= N; i++ )
              g[i].clear();
         
         for( int i = 1; i < N; i++ )
         {
              int a, b;
              scanf("%d %d", &a, &b);
              g[a].push_back(b);
              p[b] = a;
              deg[a]++;
         }     
         
         for( int i = 1; i <= N; i++ )
              if( deg[i] )
                  at[i].resize( deg[i] );
                  
         df( 1 );
         
         printf("%d\n", dp[1] );
    }
    
    return 0;    
}