这的确是一道好题,我们不妨依循思路一步步推导,看问题是如何被解决的。
做一些约定,设$m$为树的叶子节点个数,设$len$为该树的直径(经过的点数)。
毫无疑问,直径可能有多条,我们需要把所有直径都破坏掉才能终止,但这些直径并不是毫无联系的。
引理:若$len$为奇数,则所有直径有同一个中点;若$len$为偶数,则所有直径有同一条最中间的边。
- 至于证明,用反证法即可,大致就是如果存在两条直径的中点不是同一个,那就会产生更长的一条直径。
题目要求的终止状态就是不存在两个可以构成直径的点,,我们可以先按$len$的奇偶讨论:
- 若$len$为奇数,即存在一个中点$x$,不难发现,如果两个点$a,b$的$lca$是$x$,那$a,b$就能构成直径,否则就不能。这启发我们把所有