Cod sursa(job #2040878)

Utilizator stefdascalescuStefan Dascalescu stefdascalescu Data 16 octombrie 2017 17:22:49
Problema Zvon Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
/*
I love you Rose
I hope you love me too
*/
#include<bits/stdc++.h>
using namespace std;
ifstream f("zvon.in");
ofstream g("zvon.out");
int t,a,b;
int n,ar[100003],v1[100002],mrkd[100002];
vector<int>v[100003];
vector<int>vs[100003];
vector<int>ar2;
bool cmp(int a, int b)
{
    return ar[a]>ar[b];
}
void dfs1(int nod)
{
    ar[nod]=0;
    if(v[nod].size()==0){
        ar[nod]=1;
        return;
    }
    for(int i=0;i<v[nod].size();++i)
    {
        dfs1(v[nod][i]);
        ar[nod]+=ar[v[nod][i]];
    }
    for(int i=0;i<v[nod].size();++i)
        v1[i]=v[nod][i];
    sort(v1,v1+v[nod].size(),cmp);
    for(int i=0;i<v[nod].size();++i)
        vs[nod].push_back(v1[i]);
}
int dfs2()
{
    int t=0;
    int d=1;
    while(d<n)
    {
        ++t;
        int prvs=d;
        for(int i=0;i<prvs;++i)
            if(mrkd[ar2[i]]+1<=vs[ar2[i]].size()){
                ++d;
                ar2.push_back(vs[ar2[i]][mrkd[ar2[i]]]);
                ++mrkd[ar2[i]];
            }
    }
    return t;
}
int main()
{
    f>>t;
    for(;t;--t)
    {
        f>>n;
        if(n==1){
            g<<0<<'\n';
            continue;
        }
        for(int i=1;i<=n;++i)
            v[i].clear(),vs[i].clear();
        memset(mrkd,0,100002);
        ar2.clear();
        for(int i=1;i<n;++i)
        {
            f>>a>>b;
            v[a].push_back(b);
        }
        dfs1(1);
        ar2.push_back(1);
        g<<dfs2()<<'\n';
    }
    return 0;
}