Cod sursa(job #100457)

Utilizator nimicLeoveanu Mihaita Alexandru nimic Data 12 noiembrie 2007 11:18:01
Problema Zvon Scor 100
Compilator cpp Status done
Runda Happy Coding 2007 Marime 1.23 kb
#include <cstdio>
#include <vector>
#include <algorithm>
#define MaxN 100100

using namespace std;

int n, t[MaxN], c[MaxN], sol[MaxN], cost[MaxN];
vector<int> vec[MaxN];
char ok[MaxN];


void solve(){
     int i, j=0, nr=1;
     scanf("%d", &n);
     memset(ok, 0, n);
     for (i=0; i<n; i++)
         vec[i].clear();
     for (i=1; i<n; i++){
         int a, b;
         scanf("%d %d", &a, &b);
         t[b-1] = a-1;
         vec[a-1].push_back(b-1);
     }
     ok[0]=1;
     while (j<nr){
           int k = c[j++];
           for (i=vec[k].size(); i--;)
               if (!ok[vec[k][i]])
                  ok[vec[k][i]] = 1, c[nr++]=vec[k][i];
     }
     memset(sol, 0, 4*n);
     for (i=n; i--;){
         int k = c[i];
         if (!vec[k].size()) continue;
         int nr=0;
         for (j=vec[k].size(); j--;)
             cost[nr++]=sol[vec[k][j]]+1;
         sort(cost, cost+nr);
         reverse(cost, cost+nr);
         for (j=0; j<nr; j++)
             if (cost[j]+j>sol[k]) sol[k] = cost[j]+j;
     }
     printf("%d\n", sol[0]);
}

int main()
{
    freopen("zvon.in", "r", stdin);
    freopen("zvon.out", "w", stdout);
    int tst;
    scanf("%d", &tst);
    while (tst--) solve();
}