这是本文档旧的修订版!
树上到每个点距离最远的距离一定为树上一条直径的两个端点之一。
分别从两个端点开始 $\text{dfs}$ 即可 $O(n)$ 求取每个点的树上最远点。
证明见 链接
或者可以考虑树形 $\text{dp}$,第一次 $\text{dfs}$ 维护每个节点子树方向上的最远距离和次远距离。
第二次 $\text{dfs}$ 维护每个节点祖先方向上的最远距离。