Cod sursa(job #2393563)

Utilizator akaprosAna Kapros akapros Data 31 martie 2019 18:00:06
Problema Zvon Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <bits/stdc++.h>
#define maxN 100002

using namespace std;

FILE *fin = freopen("zvon.in", "r", stdin);
FILE *fout = freopen("zvon.out", "w", stdout);

int T, n;
int dp[maxN];
vector < int > sons[maxN];

void init()
{
    for (int i = 0; i < n; ++ i)
    {
        dp[i] = 0;
        sons[i].clear();
    }
}
void readTree()
{
    for (int i = 1; i < n; ++ i)
    {
        int u, v;
        scanf("%d%d", &u, &v);
        -- u;
        -- v;
        sons[u].push_back(v);
    }
}

int cmp(int a, int b)
{
    if (dp[a] == dp[b]) return a < b;
    return dp[a] < dp[b];
}
void dfs(int nod)
{
    for (int son : sons[nod])
        dfs(son);
    int len = sons[nod].size();
    if (!len)
    {
        dp[nod] = 0;
        return ;
    }
    sort(sons[nod].begin(), sons[nod].end(), cmp);
    for (int i = 0; i < len; ++ i)
        dp[nod] = max(dp[sons[nod][i]] + len - i, dp[nod]);
}
int main()
{
    scanf("%d", &T);
    while (T --)
    {
        scanf("%d", &n);
        init();
        readTree();
        dfs(0);
        printf("%d\n", dp[0]);
    }
    return 0;
}