Mai intai trebuie sa te autentifici.

Cod sursa(job #96784)

Utilizator astronomyAirinei Adrian astronomy Data 3 noiembrie 2007 13:38:02
Problema Zvon Scor Ascuns
Compilator cpp Status done
Runda Marime 1.17 kb
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;

#define pb push_back
#define vit vector<int>::iterator
#define MAX(a,b) ((a) > (b) ? (a) : (b))

int N, root, A[1<<17], viz[1<<17];
vector<int> G[1<<17];
int aux[1<<17];

void dfs(int x)
{
    if(G[x].size() == 0) { A[x] = 0; return ; }

    int i, j, p = 0, ret = -1, k = G[x].size();
    
    for(vit it = G[x].begin(); it != G[x].end(); ++it)
        dfs(*it), aux[++p] = A[*it];

    sort(aux+1, aux+p+1);
    
    for(i = 1, j = k; i <= k; i++, j--)
        ret = MAX(ret, aux[i]+j);

    A[x] = ret;
}

void read_and_solve(void)
{
    int i, a, b;

    scanf("%d ", &N);

    for(i = 1; i <= N; i++) viz[i] = A[i] = 0, G[i].clear();

    for(i = 1; i < N; i++)
        scanf("%d %d", &a, &b), G[a].pb(b), viz[b] = 1;

    for(i = 1; i <= N; i++)
     if(!viz[i]) root = i;

    dfs(root);

    printf("%d\n", A[root]);
}

int main(void)
{
    freopen("zvon.in", "rt", stdin);
    freopen("zvon.out", "wt", stdout);

    int teste;
    scanf("%d ", &teste);

    while(teste--)
        read_and_solve();

    return 0;
}