Cod sursa(job #99499)

Utilizator sealTudose Vlad seal Data 11 noiembrie 2007 12:04:18
Problema Zvon Scor 100
Compilator cpp Status done
Runda Happy Coding 2007 Marime 1.25 kb
using namespace std;
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#define Nm 100001
#define max(a,b) ((a)>(b)?(a):(b))
int *G[Nm],D[Nm],A[Nm],B[Nm],M[Nm],n;

void read()
{
    char S[13];
    int i,j;

    scanf("%d ",&n);
    memset(D,0,sizeof(D));
    for(i=1;i<n;++i)
    {
        gets(S);
        for(A[i]=j=0;S[j]!=' ';++j)
            A[i]=A[i]*10+S[j]-'0';
        for(B[i]=0,++j;S[j];++j)
            B[i]=B[i]*10+S[j]-'0';
        ++D[A[i]];
    }
}

bool cmp(int a, int b)
{
    return M[a]>M[b];
}

void DFS(int x)
{
    if(!D[x])
        M[x]=0;

    int i;

    for(i=0;i<D[x];++i)
        DFS(G[x][i]);

    sort(G[x],G[x]+D[x],cmp);
    for(M[x]=i=0;i<D[x];++i)
        M[x]=max(M[x],M[G[x][i]]+i+1);
}

void solve()
{
    int i;

    for(i=1;i<=n;++i)
        G[i]=(int*)malloc(D[i]*sizeof(int));
    memset(D,0,sizeof(D));
    for(i=1;i<n;++i)
        G[A[i]][D[A[i]]++]=B[i];

    DFS(1);

    for(i=1;i<=n;++i)
        free(G[i]);
}

int main()
{
    int t;

    freopen("zvon.in","r",stdin);
    freopen("zvon.out","w",stdout);
    scanf("%d",&t);

    while(t--)
    {
        read();
        solve();
        printf("%d\n",M[1]);
    }
    return 0;
}