例题:AcWing.1063 永无乡
(n) 为合并成的树的大小。
[T(n)=max_{0 leq m leq n/2} {T(m)+T(n-m)+mlog(n-m)}
]
发现这样不好证。
于是我们可以单独对每一个结点统计贡献。
刚开始有 (n) 个结点,每个结点自成一棵树(即所在树的大小为 (1)).
对于每个结点 u ,若其所在树合并一次,并且 u 所在树是较小的。
那么 u 所在树至少增大一倍,所以 u 至多合并 (log_{2}n) 次。
把一次合并的复杂度平摊到 小的树中每个节点上,那么 每个结点一次合并将有 (log_{2}n) 的复杂度。
综上 每个结点:
- 至多合并 (log_{2}n) 次.
- 一次合并摊上 (log_{2}n) 的复杂度,
- 共有 n 个结点
故总的复杂度为 (O(nlog^{2}n).)
map
,set
,priority_queue
的启发式合并复杂度同理可证。
推荐阅读