![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树链剖分
pigzhouyb
一个来自浙江的可爱的萌萌哒的肥肥胖胖的OIer
展开
-
『树链剖分』原理及简单应用
树的重链剖分 我们可以把一个树剖分为若干条链,按照如下规则剖分可以得到的结论是:树上任意两点间的的链数一定不超过lognlog_nlogn条。证明略。 将每一个节点的重儿子和自己为一个链内。一个节点的轻儿子单独成为链的开端。 其中重儿子为sizesizesize最大的节点,轻儿子为不是重儿子的儿子。 具体的代码可以这样实现: void dfs1(int x,int fa) { size[x...原创 2019-08-01 22:35:28 · 222 阅读 · 0 评论 -
『树链剖分·树上倍增·线段树』遥远的国度
题目描述 题解 难点在于如何处理换根操作。我们可以分情况讨论。假设当前根节点为rootrootroot,询问子树为son。son。son。 当xxx不在rootrootroot到111的路径中时,我们发现答案不会产生变化,直接输出x的子树中的最小值即可。在这里,我们可以用树的DFS序的最小值即可。 如果在这条路径中,我们发现答案就是除了这条链上x的儿子所在子树的所有节点的最小值。即rootro...原创 2019-08-02 12:49:22 · 93 阅读 · 0 评论