Cod sursa(job #2489451)

Utilizator bluestorm57Vasile T bluestorm57 Data 8 noiembrie 2019 19:52:44
Problema Zvon Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.53 kb
#include <bits/stdc++.h>

using namespace std;

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

const int NMAX = 100005;
const int inf = 1e9;
int n,T;
vector < int > v[NMAX];
deque < pair < int, int> > d;
int lvl[NMAX], sons[NMAX];

bool cmp(int x, int y){
    return sons[x] > sons[y];
}

void dfs(int node, int level){
    lvl[node] = level;
    sons[node] = 0;
    for(auto it: v[node]){
        dfs(it, level + 1);
        sons[node] = max(sons[it] + 1, sons[node]);
    }
    sort(v[node].begin(), v[node].end(), cmp);
}

int main(){
    int i,x,y,ans,node,time;
    f >> T;
    while(T--){
        f >> n;
        for(i = 1 ; i <= n ; i++)
            v[i].clear(), sons[i] = 0;
        d.clear();
        for(i = 1 ; i < n ; i++){
            f >> x >> y;
            v[x].push_back(y);
        }

        dfs(1, 0);

        d.push_back(make_pair(1,0));

        ans = 0;
        while(!d.empty()){
            node = d.front().first;
            time = d.front().second;
            d.pop_front();

            if(v[node].size() == 0)
                ans = max(ans, time);
            else
                if(v[node].size() == 1)
                    d.push_back(make_pair(v[node][0], time + 1));
                else{
                    int add = 1;
                    for(auto it: v[node]){
                        d.push_back(make_pair(it, time + add));
                        add++;
                    }
                }
        }

        g << ans << "\n" ;
    }


    return 0;
}