简单地说一下今天写这道题的感受吧.

\(①\) \(:\) 审题时主观地默认了样例中的 \(1\) 是根,导致样例没看懂.

\(②\) \(:\) 求连通块个数的时候只想到并查集,其实用 \(dfs\) 标记更好.

\(③\) \(:\) 出现了fa[x] = x 的情况,其实是fa[x] == x ,查错了好久.

\(④\) \(:\) 认为第一遍 \(dfs\) 找出最远的根有两个以上时,这些根就是答案,根本不用第二遍 \(dfs\) (有争议).

\(⑤\) \(:\) 本质为树上最长路径. \(s1\) 到根的距离

要证明一个论题:以无根树(没有明确规定谁是根)上任意一点为根,距离这个根最远的点(设为 \(t\) ),一定在树的最长路径上.

\(①\) \(:\) 假设最长路径经过选定的根,那么根据贪心,最远距离肯定要选上,那么这个点一定在.

\(②\) \(:\) 假设最长路径 经过选定的根,那么假设经过某点 \(s\) ,最长路径两端点为 \(s1\) ,\(s2\)\(s1\)到根的距离是 \(s1\)\(s\) 的距离加上 \(s\) 到根的距离, \(t\) 到根的距离是大于 \(s1\) 到根的距离,那么肯定大于 \(s1\)\(s\) 的距离,这样 \(t\)\(s\) 再到 \(s2\)就形成了一条更长的路径,与题设相悖.

\(⑥\) 更好的办法可以尝试dp,以任意一个点为根,找出离根的最长与次长距离,在比较每一个根就可求得答案.