Cod sursa(job #1805426)

Utilizator alittlezzCazaciuc Valentin alittlezz Data 13 noiembrie 2016 19:40:23
Problema Zvon Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.27 kb
#include <cstdio>
#include <queue>
#include <algorithm>
using namespace std;

vector <int> child[100005];
int parent[100005];
int dp[100005];
int q[100005];

bool comp(int a, int b){
    return dp[a] > dp[b];
}

int main(){
    freopen("zvon.in", "r", stdin);
    freopen("zvon.out", "w", stdout);
    int T,test,i,n,j,x,y,b,e,mx,node;
    scanf("%d", &T);
    for(test = 1;test <= T;test++){
        scanf("%d", &n);
        for(i = 1;i < n;i++){
            scanf("%d %d", &x, &y);
            child[x].push_back(y);
            parent[y] = x;
        }
        b = 1;
        e = 0;
        for(i = 1;i <= n;i++){
            if(child[i].empty() == true){
                q[++e] = i;
            }
        }
        while(b <= e){
            node = q[b++];
            sort(child[node].begin(), child[node].end(), comp);
            i = 1;
            mx = 0;
            for(auto it : child[node]){
                mx = max(mx, dp[it] + i);
                i++;
            }
            dp[node] = mx;
            if(node != 1){
                q[++e] = parent[node];
            }
        }
        printf("%d\n", dp[1]);
        for(i = 1;i <= n;i++){
            child[i].clear();
            dp[i] = 0;
        }
    }
    return 0;
}