Cod sursa(job #1716216)

Utilizator liviu23Liviu Andrei liviu23 Data 12 iunie 2016 10:53:22
Problema Zvon Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.14 kb
#include <fstream>
#include <vector>
#include <iostream>
#include <algorithm>
#define DIM 100005
using namespace std;

vector<int> adj[DIM];
int n,q[DIM],deg[DIM],len[DIM];

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

int bfs(int nod) {
    int st=0,dr=1,u,maxim=0;
    q[st]=nod,len[nod]=0;
    while(st<dr) {
        u=q[st];
        for(int i=0;i<adj[u].size();i++) {
            q[dr]=adj[u][i];
            len[adj[u][i]]=len[u]+i+1;
            if(len[adj[u][i]]>maxim)
                maxim=len[adj[u][i]];
            dr++;
        }
        st++;
    }
    return maxim;
}

int solve(int u) {
    for(int i=0;i<adj[u].size();i++)
        deg[adj[u][i]]=solve(adj[u][i]);
    sort(adj[u].begin(),adj[u].end(),comp);
    return bfs(u);
}

int main()
{
    ifstream fin("zvon.in");
    ofstream fout("zvon.out");
    int t,a,b;
    fin>>t;
    for(int i=1;i<=t;i++) {
        fin>>n;
        for(int i=1;i<n;i++) {
            fin>>a>>b;
            adj[a].push_back(b);
        }
        fout<<solve(1)<<'\n';
        for(int i=1;i<=n;i++)
            adj[i].clear();
    }
    return 0;
}