树的直径
c++
const int MAXN = 2e5 + 5;
std::vector<int> ver[MAXN];
int dep[MAXN];
int far_node;
void add_edge(int x, int y) {
ver[x].push_back(y);
ver[y].push_back(x);
}
void dfs(int x, int fa) {
if (dep[x] > dep[far_node]) {
far_node = x;
}
for (int y : ver[x]) {
if (y == fa) continue;
dep[y] = dep[x] + 1;
dfs(y, x);
}
}
int get_tree_diameter(int root, int n) {
for (int i = 1; i <= n; ++i) dep[i] = 0;
far_node = root;
dfs(root, 0);
int st = far_node;
for (int i = 1; i <= n; ++i) dep[i] = 0;
far_node = st;
dfs(st, 0);
return dep[far_node];
}