Cod sursa(job #176737)

Utilizator vlad.maneaVlad Manea vlad.manea Data 11 aprilie 2008 16:44:54
Problema Zvon Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
using namespace std;

#include <algorithm>
#include <vector>
#include <cstdio>
#define nmax 100005

int V[nmax], g[nmax], t[nmax];

vector<int> L[nmax];

int T, N;

bool cmp(const int &a, const int &b)
{
  return V[a] >= V[b];
}

void dfs(int n)
{
  int i, j, nrvecini = V[n] = 0;

  vector<int>::iterator it;

  for (it = L[n].begin(); it != L[n].end(); ++it, ++nrvecini)
    dfs(*it);

  if (nrvecini == 0)
  {
    V[n] = 0;
    return;
  }

  for (it = L[n].begin(), i = 0; it != L[n].end(); ++it, ++i)
    g[i] = *it;

  sort(g, g+i, cmp);

  for (j = 0; j < i; ++j)
    if (j+V[g[j]] > V[n])
      V[n] = j+V[g[j]];

  ++V[n];
}

int main()
{
  int i, a, b;

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

  scanf("%d", &T);

  while (T--)
  {
    scanf("%d", &N);

    if (N == 1)
      printf("0\n");
    else
    {
      for (i = 1; i <= N; ++i)
      {
        L[i].clear();
        t[i] = 0;
      }

      for (i = 1; i < N; ++i)
      {
        scanf("%d%d", &a, &b);
        L[a].push_back(b);
        t[b]++;
      }

      for (i = 1; t[i]; ++i);

      dfs(i);

      printf("%d\n", V[i]);

    }
  }

  return 0;
}