【題解】CSES 1131 Tree Diameter

【題目敘述】https://cses.fi/problemset/task/1131/

#include <iostream>
#include <vector>
using namespace std;
 
int n, a, b, mx[200005], idx[200005];
vector <int> v[200005];
 
void dfs(int x, int pre){
    idx[x] = x;
    mx[x] = 0;
    for (auto i:v[x]){
        if (i == pre) continue;
        dfs(i, x);
        if (mx[i]+1 > mx[x]){
            mx[x] = mx[i]+1;
            idx[x] = idx[i];
        }
    }
}
 
int main() {
    cin >> n;
    for (int i = 1; i < n; i++){
        cin >> a >> b;
        v[a].push_back(b);
        v[b].push_back(a);
    }
    dfs(1, 0);
    int root = idx[1];
    dfs(root, 0);
    cout << mx[root] << "\n";
}
分享本文 Share with friends