Cod sursa(job #96789)

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

#define pb push_back
#define MAX(a,b) ((a) > (b) ? (a) : (b))

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

void dfs(int x)
{
    int i, j, p = 0, ret = 0, k = G[x].size();
    
    for(i = 0; i < G[x].size(); i++)
        dfs(G[x][i]);
    for(i = 0; i < G[x].size(); i++)
        aux[++p] = A[ G[x][i] ];

    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++) A[i] = 0, G[i].clear();

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

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

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;
}