Cod sursa(job #1838429)

Utilizator vladm98Munteanu Vlad vladm98 Data 1 ianuarie 2017 00:04:00
Problema Diametrul unui arbore Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.25 kb
#include <bits/stdc++.h>

using namespace std;
vector <int> graf[100001];
queue <pair<int, int>> solve;
bitset <100001> verif;
bitset <100001> verif1;
int main()
{
    ifstream fin ("darb.in");
    ofstream fout ("darb.out");
    int n, nod, diametru;
    fin >> n;
    for (int i = 1; i<n; ++i)
    {
        int x, y;
        fin >> x >> y;
        graf[x].push_back(y);
        graf[y].push_back(x);
    }
    solve.push(make_pair(1, 1));
    verif[1] = 1;
    while (solve.empty() == 0)
    {
        nod = solve.front().first;
        diametru = solve.front().second;
        solve.pop();
        for (auto x:graf[nod])
        {
            if (verif[x] == 0)
            {
                verif[x] = 1;
                solve.push(make_pair(x, diametru+1));
            }
        }
    }
    solve.push(make_pair(nod, 1));
    verif1[nod] = 1;
    while (solve.empty() == 0)
    {
        nod = solve.front().first;
        diametru = solve.front().second;
        solve.pop();
        for (auto x:graf[nod])
        {
            if (verif1[x] == 0)
            {
                verif1[x] = 1;
                solve.push(make_pair(x, diametru+1));
            }
        }
    }
    fout << diametru;
    return 0;
}