Cod sursa(job #102508)

Utilizator rgrigRadu Grigore rgrig Data 14 noiembrie 2007 14:44:59
Problema Zvon Scor 100
Compilator cpp Status done
Runda Happy Coding 2007 Marime 0.91 kb
#include <stdio.h>
#include <vector>
#include <algorithm>

using namespace std;

int n;
vector<int> sub[100000];
int cache[100000];

int solve(int x) {
  int& r = cache[x];
  if (r >= 0) return r;
  r = 0;
  int i;
  vector<int>& children = sub[x];
  int c = children.size();
  vector<int> sol(c);
  for (i = 0; i < c; ++i)
    sol[i] = solve(children[i]);
  sort(sol.begin(), sol.end());
  for (i = 0; i < c; ++i)
    r = max(r, sol[i] + c - i);
  return r;
}

int main() {
  int i, j;
  FILE* in = fopen("zvon.in","r");
  FILE* out = fopen("zvon.out","w");
  int tests; fscanf(in,"%d",&tests);
  while (tests--) {
    fscanf(in,"%d",&n);
    for (i = 0; i < n; ++i) {
      cache[i] = -1;
      sub[i].clear();
    }
    int a, b;
    for (i = 1; i < n; ++i) {
      fscanf(in,"%d %d",&a,&b);
      sub[a-1].push_back(b-1);
    }
    int r = 0;
    for (i = 0; i < n; ++i)
      r = max(r, solve(i));
    fprintf(out,"%d\n",r);
  }
}