一棵树的直径就是这棵树上存在的最长路径。现在有一棵n个节点的树,现在想知道这棵树的直径包含的边的个数是多少?
如图所示的数据,这棵树的直径为(1-2-3-6-9)这条路径,包含的边的个数为4,所以答案是4。
输入
第1行:一个整数n,表示树上的节点个数。(1<=n<=100000)
第2-n行:每行有两个整数u,v,表示u与v之间有一条路径。(1<=u,v<=n)
输出
输出一个整数,表示这棵树直径所包含的边的个数。
输入样例
10
1 2
2 3
3 4
3 5
3 6
3 7
3 10
6 8
6 9
输出样例
4
用 dp[i]维护以 i 为根的子树的深度,
dp[i] = max(dp[i], dp[j]+1)(j 为 i 的儿子)。
求出任意节点 i 子树深度之后,经过 i 的最长路径就是最深的两颗子树深度相加。
和这题有点像
#include <bits/stdc++.h>
using namespace std;
int n,x,y,root;
vector<int>