Cod sursa(job #2541919)

Utilizator sichetpaulSichet Paul sichetpaul Data 9 februarie 2020 09:46:51
Problema Zvon Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <bits/stdc++.h>
#define Nmax 100005
#define nr first
#define pos second
using namespace std;

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

int N, T, ans;
int dp[Nmax], t[Nmax];
pair<int, int> v[Nmax];
vector<int> G[Nmax];

void DFS(int node) {
    ans = max(ans, t[node]);
    if (!G[node].empty()) {
        int K = 0;
        for (auto it : G[node])
           ++K, v[K].nr = dp[it], v[K].pos = it;
        sort(v + 1, v + K + 1);

        for (int i = K; i >= 1; --i)
            t[v[i].pos] = t[node] + K - i + 1, DFS(v[i].pos);
    }
}

void makeDP(int node) {
    dp[node] = 1;
    for (auto it : G[node]) {
        makeDP(it);
        dp[node] += dp[it];
    }
}
int main()
{
    f >> T;
    for (int tt = 1; tt <= T; ++tt) {
        f >> N;
        for (int i = 1; i <= N; ++i)
            dp[i] = t[i] = 0, G[i].clear();

        for (int i = 1; i < N; ++i) {
            int x, y;
            f >> x >> y;
            G[x].push_back(y);
        }

        makeDP(1);
        ans = 0;
        DFS(1);

        g << ans << '\n';
    }
    return 0;
}