Cod sursa(job #2377375)

Utilizator dan.ghitaDan Ghita dan.ghita Data 10 martie 2019 06:56:59
Problema Diametrul unui arbore Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.04 kb
#include <bits/stdc++.h>

using namespace std;

ifstream f("darb.in");
ofstream g("darb.out");

int n, a, b;
vector<vector<int>> edges;
vector<int> dist;

void bfs(int s)
{
    deque<int> dq;
    dq.push_back(s);
    dist[s] = 0;

    while (!dq.empty())
    {
        int x = dq.front();
        dq.pop_front();

        for (auto next : edges[x])
            if (dist[next] == -1)
                dist[next] = dist[x] + 1,
                dq.push_back(next);
    }
}

int get_diameter()
{
    bfs(1);

    int indx = 1;
    for (int i = 2; i <= n; ++i)
        if (dist[indx] < dist[i])
            indx = i;

    for (auto& x : dist)
        x = -1;

    bfs(indx);

    int mx = -1;
    for (auto x : dist)
        mx = max(mx, x);

    return mx + 1;
}

int main()
{
    f >> n;

    edges.resize(n + 1);
    dist.resize(n + 1, -1);

    for (int i = 1; i < n; ++i)
        f >> a >> b,
        edges[a].push_back(b),
        edges[b].push_back(a);

    g << get_diameter();

    return 0;
}