Cod sursa(job #2489424)

Utilizator bluestorm57Vasile T bluestorm57 Data 8 noiembrie 2019 19:23:16
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];

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]);
    }
}

int main(){
    int i,x,y,ans,node,time;
    f >> T;
    while(T--){
        f >> n;
        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{
                    if(sons[v[node][0]] >= sons[v[node][1]]){
                        d.push_back(make_pair(v[node][0], time + 1));
                        d.push_back(make_pair(v[node][1], time + 2));
                    }else{
                        d.push_back(make_pair(v[node][0], time + 2));
                        d.push_back(make_pair(v[node][1], time + 1));
                    }
                }
        }

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


    return 0;
}