Cod sursa(job #1336301)

Utilizator Athena99Anghel Anca Athena99 Data 7 februarie 2015 16:18:33
Problema Zvon Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <algorithm>
#include <fstream>
#include <queue>
#include <vector>

using namespace std;

ifstream fin("zvon.in");
ofstream fout("zvon.out");

const int nmax= 100000;

int f[nmax+1], d[nmax+1], s[nmax+1], aux[nmax+1];

vector <int> v[nmax+1];

int main(  ) {
    int t;
    fin>>t;
    for ( int cnt= 1; cnt<=t; ++cnt ) {
        int n;
        fin>>n;

        for ( int i= 1; i<=n; ++i ) {
            v[i].clear();
            f[i]= d[i]= 0;
        }
        for ( int i= 1; i<=n-1; ++i ) {
            int x, y;
            fin>>x>>y;
            v[x].push_back(y);
            f[y]= x;
        }

        queue <int> q;
        for ( int i= 1; i<=n; ++i ) {
            s[i]= (int)v[i].size();
            if ( s[i]==0 ) q.push(i);
        }
        for ( ; !q.empty(); q.pop() ) {
            int x= q.front();
            --s[f[x]];
            if ( s[f[x]]==0 ) {
                q.push(f[x]);

                for ( int j= 0; j<(int)v[f[x]].size(); ++j ) {
                    aux[j]= d[v[f[x]][j]];
                }
                sort(aux, aux+(int)v[f[x]].size());

                for ( int j= 0; j<(int)v[f[x]].size(); ++j ) {
                    d[f[x]]= max(d[f[x]], aux[j]+(int)v[f[x]].size()-j);
                }
            }
        }

        fout<<d[1]<<"\n";
    }

    return 0;
}