单点时限: 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$相连。
输入保证是一棵树。
一个数,表示树的直径。
3 1 2 1 3
2
除了dfs
的做法,还可以使用树形dp的做法。