Cod sursa(job #1892615)

Utilizator theodor1289Theodor Amariucai theodor1289 Data 25 februarie 2017 10:12:31
Problema Zvon Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.19 kb
#include <fstream>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("zvon.in");
ofstream fout("zvon.out");
int p, n;

const int NMAX=100010;
int tnod[NMAX];

vector<int> G[NMAX];

bool desc(int a, int b)
{
    return tnod[a]>tnod[b];
}

void analiza(int nod)
{
    for(int i=0;i<G[nod].size();i++)
        analiza(G[nod][i]);

    sort(G[nod].begin(), G[nod].end(), desc);
    //ca sa plecam in ordine descrescatoare ca sa terminam cu cati mai multi arbori simultan
    for(int i=1;i<=G[nod].size();i++)
        tnod[nod]=max(tnod[nod], tnod[G[nod][i-1]]+i);
        //parcurgem lista subordonatilor de la subarborii mari spre subarborii mici, adaugand mereu cate o secunda (i) fiindca dureaza 1sec transferul catre un alt subordonat
        //retinem maximul
}

int main()
{
    fin>>p;
    for(int i=1;i<=p;i++)
    {
        fin>>n;
        for(int i=1;i<=n;i++)
        {
            G[i].clear();
            tnod[i]=0;
        }

        for(int i=1, a, b;i<n;i++)
        {
            fin>>a>>b;
            G[a].push_back(b);
        }

        analiza(1);
        fout<<tnod[1]<<'\n';
    }
    return 0;
}