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