Cod sursa(job #101129)

Utilizator fireatmyselfBogdan-Alexandru Stoica fireatmyself Data 12 noiembrie 2007 23:36:07
Problema Zvon Scor 0
Compilator cpp Status done
Runda Happy Coding 2007 Marime 1.47 kb
#include <cstdio>
#include <vector>

using namespace std;

#define MAX(a,b) (((a)>(b))?(a):(b))
#define NMAX 100002

int N, Case;
int V[NMAX], G[NMAX];
char Viz[NMAX];
vector<int> A[NMAX];

void init()
{
        int i, j;

        for (i = 0; i <= N; i++)
        {
                A[i].clear();
                V[i] = ' '; Viz[i] = G[i] = 0;
        }
}

void read()
{
        int i, j, k;
        scanf("%d", &N);
        for (k = 1; k < N; k++)
        {
            scanf("%d%d", &i, &j);
            A[i].push_back(j); G[i]++;
        }
}

void dfs(int i)
{
        int j, k, poz, max, m = G[i], f;

        for (j = 0; j < m; j++) dfs(A[i][j]);
        
        for (j = 0; j < m; j++) Viz[A[i][j]] = '0';
        
        for (j = 0, V[i] = 0; j < m; j++)
        {
              max = 0; poz = 0;
              for (k = 0; k < m; k++)
              {
                  f = A[i][k];
                  if (Viz[ f ]=='0' && max<=V[ f ])
                     max = V[ f ], poz = f;
              }
              V[i] = MAX(V[i],max+j+1);
              Viz[poz] = '1';
        }
}

void solve()
{
        dfs(1);
        printf("%d\n", V[1]);
}

int main()
{
        freopen("zvon.in", "r", stdin);
        freopen("zvon.out", "w", stdout);

        scanf("%d", &Case);
        while (Case--)
        {
              read();
              solve();
              init();
        }
      
        return 0;
         
}