Cod sursa(job #2637901)

Utilizator Marius7122FMI Ciltea Marian Marius7122 Data 25 iulie 2020 17:08:40
Problema Zvon Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

ifstream fin("zvon.in");
ofstream fout("zvon.out");

vector<vector<int>> g;
vector<int> dp, Subordonati;
int TimpMax;

void df(int nod, int ant)
{
    TimpMax = max(TimpMax, dp[nod]);

    vector<pair<int, int>> angajati;
    for (int neigh : g[nod])
    {
        if(neigh != ant)
            angajati.push_back({ Subordonati[neigh], neigh });
    }

    sort(angajati.begin(), angajati.end());
    reverse(angajati.begin(), angajati.end());

    int timp = dp[nod];
    
    for (auto angajat : angajati)
    {
        dp[angajat.second] = ++timp;
        df(angajat.second, nod);
    }
}

void dfSubordonati(int nod)
{
    for (int neigh : g[nod])
    {
        dfSubordonati(neigh);
        Subordonati[nod] += Subordonati[neigh] + 1;
    }
}

int main()
{
    int t;
    fin >> t;
    while (t--)
    {
        int n;
        fin >> n;
        g.clear();
        g.resize(n + 1);

        Subordonati.resize(n + 1, 0);
        for(int i = 1; i < n; i++)
        {
            int x, y;
            fin >> x >> y;
            g[x].push_back(y);
        }

        dfSubordonati(1);

        TimpMax = 0;
        dp.resize(n + 1, 0);
        df(1, 0);

        fout << TimpMax << '\n';
    }
    return 0;
}