Cod sursa(job #98425)

Utilizator vlad_popaVlad Popa vlad_popa Data 10 noiembrie 2007 13:21:33
Problema Zvon Scor 100
Compilator cpp Status done
Runda Happy Coding 2007 Marime 1.63 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;
    
    s[nod] = 0;
    
    for (i = 0; i < Nf[nod]; ++ i)
        df (fi[nod][i]);
        
    for (i = 0; i < Nf[nod]; ++ i)
        viz[i] = s[fi[nod][i]];
        
    sort (viz, viz + Nf[nod]);
        
    for (j = Nf[nod] - 1; j >= 0; -- j)
        if (s[nod] <= viz[j] + Nf[nod] - j)
            s[nod] = viz[j] + Nf[nod] - j;
        
    
}

char sir[32];

void read ()
{
    int T, i, x, y, l, j, ct;
    scanf ("%d\n", &T);
    
    while (T--)
    {
        memset (Nf, 0, sizeof (Nf));
        
        for (i = 1; i <= N; ++ i)
            fi[i].clear();
        
        scanf ("%d\n", &N);
        
        for (i = 1; i < N; ++ i)
        {
            x = y = 0;
            gets (sir);
            l = strlen (sir);
            //puts (sir);
            for (j = l - 1, ct = 1; sir[j] != ' '; -- j, ct *= 10)
                y += (sir[j] - '0') * ct;
            for (ct = 1, -- j; j >= 0; -- j, ct *= 10)
                x += (sir[j] - '0') * ct;
            //printf ("%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;
}