CSES Solutions
#1131Tree Algorithms

Tree Diameter

View on CSES

Solution

1131-Tree_Diameter.cpp
1#include <bits/stdc++.h>
2using namespace std;
3
4#define int long long
5
6const int MAXN = 2e5+5;
7vector<int> adj[MAXN];
8
9pair<int, int> dfs(int i, int p) {
10  pair<int, int> ret = {0, i};
11  for (int &x: adj[i]) {
12    if (x == p) continue;
13    pair<int, int> tmp = dfs(x, i);
14    ++tmp.first;
15    ret = max(ret, tmp);
16  }
17  return ret;
18}
19
20signed main() {
21  ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
22
23  int N;
24  cin >> N;
25
26  for (int i = 1; i < N; ++i) {
27    int u, v; cin >> u >> v;
28    adj[u].emplace_back(v);
29    adj[v].emplace_back(u);
30  }
31
32  pair<int, int> d1 = dfs(1, 0);
33  pair<int, int> d2 = dfs(d1.second, 0);
34
35  cout << d2.first << '\n';
36  return 0;
37}

Editorial not yet generated for this problem. Run the editorial generation script to add hints and detailed explanations.