数据结构与算法专题题库

1025. 树的直径

单点时限: 2.0 sec

内存限制: 512 MB

给定一个有$n$的节点的树,计算树上最远的两个点之间的距离。

如果你已经知道该怎么做了,可以直接跳下面的部分。

首先,给定的是一棵无根树,无根树一般用边来表示。对于输入的树上的边建立类似双向图的存储结构。

随机选择一个节点,假设是$1$,在以$1$为根的有根树上进行一遍dfs或者bfs遍历,并记录下每个点到根$1$的距离。

选择到根$1$距离最远的点$u$(如果有多个,随机选择一个都可以),根据节点$u$再建立一个有根树,这个时候以$u$为根的有根树上进行一遍dfs或者bfs遍历,并记录下每个点到根$u$的距离。

第二次遍历之后,距离$u$最远的点对应的距离就是树的直径。

输入格式

一个行一个数$n$表示树上节点的个数,满足$n \leq 10^6$。

接下来$n-1$行,每行$2$个数$u,v$,表示$u$和$v$相连。

输入保证是一棵树。

输出格式

一个数,表示树的直径。

样例

Input
3
1 2
1 3
Output
2

提示

除了dfs的做法,还可以使用树形dp的做法。

不限期开放

题目列表