Cod sursa(job #2682872)

Utilizator theodor.moroianuTheodor Moroianu theodor.moroianu Data 9 decembrie 2020 20:01:00
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;

int main()
{
    ifstream in("darb.in");
    ofstream out("darb.out");

    int n;
    in >> n;

    vector <vector <int>> adia(n);

    for (int i = 1; i < n; i++) {
        int a, b;
        in >> a >> b;
        a--, b--;
        adia[a].push_back(b);
        adia[b].push_back(a);
    }

    auto Bfs = [&](int nod) {
        vector <int> dist(n, 1e9), q = { nod };
        dist[nod] = 0;
        for (int i = 0; i < (int)q.size(); i++) {
            nod = q[i];
            for (auto vec : adia[nod]) {
                if (dist[vec] == 1e9) {
                    dist[vec] = 1 + dist[nod];
                    q.push_back(vec);
                }
            }
        }
        return dist;
    };

    vector <int> d1 = Bfs(0);
    pair <int, int> vmax = { -1, -1 };

    for (int i = 0; i < n; i++)
        vmax = max(vmax, make_pair(d1[i], i));

    vector <int> d2 = Bfs(vmax.second);
    int ans = 0;
    for (int i = 0; i < n; i++)
        ans = max(ans, d2[i]);

    out << ans + 1 << '\n';

    return 0;
}