Cod sursa(job #983613)

Utilizator AlexandruValeanuAlexandru Valeanu AlexandruValeanu Data 12 august 2013 13:10:10
Problema Zvon Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

#define Nmax 100005

vector <int> timp(Nmax);
vector <int> G[Nmax];

struct cmp
{
    bool operator()(const int &a, const int &b)
    {
        return timp[a] > timp[b];
    }
};

void DFS( int node )
{
    for ( unsigned i = 0; i < G[node].size(); ++i )
                DFS( G[node][i] );

    timp[node] = 0;

    sort( G[node].begin(), G[node].end(), cmp() );

    for ( unsigned i = 0; i < G[node].size(); ++i )
            timp[node] = max( timp[node], timp[ G[node][i] ] + int(i) + 1 );
}

void DF(int k)
{
    for(int i = 0; i < G[k].size(); ++i)
        DF(G[k][i]);
    timp[k] = 0;
    sort(G[k].begin(),G[k].end(),cmp());
    for(int i = 0; i < G[k].size();++i)
        timp[k] = max(timp[k], timp[G[k][i]] + i + 1);
}

int T, N;

int main()
{
    ifstream f("zvon.in");
    ofstream g("zvon.out");

    f >> T;

    for ( ; T; T-- )
    {
        f >> N;

        for ( int i = 1, a, b; i < N; ++i )
        {
            f >> a >> b;

            G[a].push_back( b );
        }

        DFS( 1 );

        g << timp[1] << "\n";

        for ( int i = 1; i <= N; ++i )
                G[i].clear();
    }

    f.close();
    g.close();

    return 0;
}