Cod sursa(job #627806)

Utilizator vlad2901Vlad Berindei vlad2901 Data 30 octombrie 2011 18:32:35
Problema Zvon Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <cstdio>
#include <vector>
#include <algorithm>
#include <cstring>
#define NMAX 100001

using namespace std;



int cost[NMAX], viz[NMAX];
int N, T;

bool cmp(int a, int b)
{
    if(cost[a] > cost[b])
    {
        return 1;
    }
    return 0;
}

void mark(vector< vector<int> > &v, int nod)
{
    int max, c, s;
    vector<int>::iterator it;
    if(v[nod].empty())
    {
        cost[nod] = 0;
        return;
    }

    for(it=v[nod].begin();it!=v[nod].end();it++)
    {
        if(!viz[*it])
        {
            viz[*it] = 1;
            mark(v, *it);
        }
    }

    sort(v[nod].begin(), v[nod].end(), cmp);

    max = 0;
    c = 1;

    for(it=v[nod].begin();it!=v[nod].end();it++)
    {
        if(max < c + cost[*it])
        {
            max = c + cost[*it];
        }
        c++;
    }
    cost[nod] = max;
}

void solve()
{
    vector< vector<int> > v(NMAX);
    int i, x, y;

    scanf("%d", &N);
    for(i=0;i<N-1;++i)
    {
        scanf("%d %d", &x, &y);
        v[x].push_back(y);
    }

    memset(cost, 0, sizeof(cost));
    memset(viz, 0, sizeof(viz));

    mark(v, 1);
}


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

    scanf("%d", &T);

    while(T--)
    {
        solve();
        printf("%d\n", cost[1]);
    }

    return 0;
}