Cod sursa(job #98315)

Utilizator vlad_popaVlad Popa vlad_popa Data 10 noiembrie 2007 12:28:32
Problema Zvon Scor 0
Compilator cpp Status done
Runda Happy Coding 2007 Marime 1.56 kb
using namespace std;

#include <cstdio>
#include <string>
#include <cassert>
#include <vector>
#include <algorithm>

#define FIN "zvon.in"
#define FOUT "zvon.out"
#define NMAX 100001

#define INF 0x3f3f3f3f
#define pb push_back

vector <int> fi[NMAX];
int N, Nf[NMAX], s[NMAX], viz[NMAX];

void df (int nod)
{
    int i, j, Max, temp;
    for (i = 0; i < Nf[nod]; ++ i)
        df (fi[nod][i]);
        
    for (i = 0; i < Nf[nod]; ++ i)
        viz[fi[nod][i]] = 0;
        
    for (j = 1; j <= Nf[nod]; ++ j)
    {
        Max = 0;
        for (i = 0; i < Nf[nod]; ++ i)
            if (!viz[fi[nod][i]] && Max <= s[fi[nod][i]])
            {
                Max = s[fi[nod][i]];
                temp = fi[nod][i];
            } 
            
        if (s[nod] <= Max + j)
            s[nod] = Max + j;
            
        viz[temp] = 1;
    }
        
    
}

void read ()
{
    int T, i, x, y;
    scanf ("%d\n", &T);
    
    while (T--)
    {
        memset (s, 0, sizeof (s));
        memset (Nf, 0, sizeof (Nf));
        
        scanf ("%d\n", &N);
        
        if (N <= 1)
        {
            printf ("%d\n", 0);
            continue;
        }
        
        for (i = 1; i < N; ++ i)
        {
            scanf ("%d %d\n", &x, &y);
            fi[x].pb (y);
            ++ Nf[x];
        }
        
        df (1);
        
        printf ("%d\n", s[1]);
    }
}

int
 main ()
{
    freopen (FIN, "rt", stdin);
    freopen (FOUT, "wt", stdout);
    
    read ();
    
    return 0;
}