![](https://img-blog.csdnimg.cn/20210718183550848.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构——树链剖分
文章平均质量分 66
无
迷蒙之雨
这个作者很懒,什么都没留下…
展开
-
CF1740H MEX Tree Manipulation
观察到这样的信息是可以合并的,因此我们用线段树维护一条重链的信息。有一棵不断加叶子的树,叶子的权值是0,其余节点的权值是其子节点的。的,因此可以用数组存储每个点轻子树的点权,方便求出。,设其轻儿子中最小的没有出现能过的自然数是。首先离线建树,把树做轻重链剖分。有一个小细节是一个点的权值是。我们可以用一个五元组。原创 2022-12-22 21:44:00 · 401 阅读 · 0 评论 -
[·V·e·n·u·s·] 长链剖分·杂题选做
首先这样选一定是最大的,并且同时因为长链剖分的性质,即每次挑最长的儿子,那么一定满足,如果。这样,我们就可以把直径端点作为树的根,因为端点有两个,所以分别以两个为根做一遍取最大值。性质2:对于任意一个选择的叶子集合,总有一种方法使得选出的边为这些叶子的虚树的边。如果不止一个,那么一定有一条链的权值较小,就会被第一种情况考虑到了。首先因为连通块的交还是连通块,且对于一个连通块而言,点数-边数=1。的所有儿子列出来,那么就是一个前缀和一个后缀的乘积。所以,我们用点的贡献,减掉边的贡献,就是答案。原创 2022-09-28 11:58:22 · 256 阅读 · 0 评论 -
[LNOI2014]LCA(树链剖分+离线处理)
洛谷题目传送门解题思路题目要求求∑i=lr(dep(LCA(i,x)))\sum_{i=l}^r(dep(LCA(i,x)))i=l∑r(dep(LCA(i,x)))其中lll,rrr,xxx是给定的我们发现这个式子不好化简,那么画个图来理解一下我们假设红色节点是xxx,蓝色节点是iii那么如果将iii到根的路径的点都染成蓝色那么红色节点到根的路径上的蓝色点个数就是dep(lca(x,i))dep(lca(x,i))dep(lca(x,i))所以我们如果对于lll到rrr的每一个iii原创 2021-10-13 21:41:46 · 157 阅读 · 0 评论 -
[国家集训队]旅游(树链剖分)
洛谷题目传送门题目描述给定一棵 n 个节点的树,边带权,编号 0∼n−1,需要支持五种操作:C i w 将输入的第 i 条边权值改为 wN u v 将 u,v 节点之间的边权都变为相反数SUM u v 询问 u,v 节点之间边权和MAX u v 询问 u,v 节点之间边权最大值MIN u v 询问 u,v 节点之间边权最小值保证任意时刻所有边的权值都在 [−1000,1000] 内。树剖模板题,唯一有一个难点就是点权和边权的转换,其实也很好办,就把每一条边的值存到它下面的节点去就行了,举个原创 2021-07-19 21:33:18 · 83 阅读 · 1 评论 -
CF487E Tourists(圆方树+树链剖分)
洛谷题目传送门解题思路首先Tarjan寻找点双连通分量,然后建立圆方树,每个方点存这个点双内的最小点权将圆方树树链剖分之后,对于修改操作,将这个点连的所有方点的值更新对于查询操作,直接查询树上两点之间路径的最小值然后就AC了怎么可能呢,如果一个圆点连着非常多个方点,那么时间复杂度就飞天了正确的做法是:建出圆方树后,每个方节点的值是它的所有子节点的最小值,而不包括父节点可以用multisetmultisetmultiset维护每个方点的权值那么修改操作时,只需要更新这个点和它的父节点就可以原创 2021-07-11 21:27:36 · 130 阅读 · 0 评论