摘要:
看到八中OJ上面吧NOIP原题的n=300扩大到了n=500000,就研究了一下O(n)的算法。首先要确定的是如果有好几条直径的话,任意一个上面都会有一个核。 证明的话可以这么想:先考虑有两条直径的情况,因为这是一棵树,所以两个直径肯定有重合的部分,如果核在重合的部分就不用说了。如果在其他地方呢,那么是不可能的= =!为什么呢?先把两条直径简化成>--<的形状,那么重合的部分的一侧的两条链是对称的。如果核在<上,那其偏心距肯定在>--上。这么看来的话肯定不如核在中间部分优。怎么找到一条直径呢,最简单的办法就是先任选一个点开始BFS/DFS,找到一个最远的点,这个点一定是 阅读全文