有思维难度,其实挺好写的。
首先,考虑一条链的情况。
那么根节点最多有两个儿子,分别延伸出两条链。
当且仅当在这两条链中各选择一个点(除了根节点),才不会有祖孙关系。
所以可以贪心地上两个堆。
考虑 100% 的数据,那么这个时候就涉及到堆的合并。
于是我们启发式合并。
这个时候,时间复杂度不再是 O(nlog2n) 了。
因为合并的时候,更大的那个,大小应该是其对应子树中的最长链长度。
根据长链剖分的分析,得到 O(nlogn)。
还有,
pbds 天 下 第 一!
代码:
1 |
|