![](https://img-blog.csdnimg.cn/20201014180756780.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树链剖分
Wuliwuliii
谁无暴风劲雨时,守得云开见日明!
展开
-
树数数【智算之道复赛E】【树链剖分+dfs序】
题目链接 我们可以考虑一个黑点u,它作为LBCA点所产生贡献次数为,其中,指的是u的子孙节点们,那么,u点作为LBCA点的贡献值就可以求出来了,就是了。 根据这样的关系,我们可以推导改变所带来的信息变化。 白点变黑点 那么,它的影响只会对它向上最近的黑色节点产生直接影响,对于再往上的黑色节点,由于被给阻断了,所以受不到影响,同时,它会产生贡献,它产生的贡献就可以通过来计算得到。 对于节点的影响呢?那么,其实相当于节点就会少去了这些部分了,所以它要减去的部分,似乎这样就达成...原创 2020-08-14 21:42:30 · 201 阅读 · 0 评论 -
QTREE2 - Query on a tree II【树链剖分+LCA】
题目链接给定一棵n个点的树,边具有边权。要求作以下操作:DIST a b 询问点a至点b路径上的边权之和 KTH a b k 询问点a至点b有向路径上的第k个点的编号有多组测试数据,每组数据以DONE结尾。 其实,一个LCA也可以维护上述两个东西,求路径和可以用差分的思想来做,求kth可以通过判断在lca的左边还是右边来求。#include <iostream>...原创 2020-04-09 15:12:34 · 153 阅读 · 0 评论 -
双重祖先【树链剖分】
题目链接 51nod 2553 双重祖先给定两棵有根树,两棵树均有????n个节点,且根均为11号点。问有多少对(????,????)(u,v)满足:在给定的两棵树中????u均为????v的祖先。数据范围:1≤????≤105,1≤????,????≤???? 首先,我们可以考虑第一棵树,向下dfs的过程中,我们可以提前的将结点给予“+1”,这样,对第二棵树的时候,我们遍历到结点的时候,实际上就是前面有多少个结点被“+1...原创 2020-04-04 08:43:17 · 336 阅读 · 0 评论 -
旗鼓相当的对手【长链剖分】
题目链接 使用长链剖分O(N)代替dsu on tree的O(N log(N))来解决该问题。 用到长链剖分的性质,所有长链的总和为N,所以,开出一个长度为N的数组来给长链们使用(节约空间,懒人vector也是可以)。 那么,这道题,我们要知道某个点向下X步所有的结点的个数以及向下X步所有的结点的权值和,我们利用这两条信息自然可以求解了。 所以,我开了*f[ ]指针和*g[...原创 2020-03-30 22:00:14 · 291 阅读 · 0 评论 -
长链剖分学习笔记【树链剖分之长链剖分】
很早的时候,就有了对轻重链剖分的概念,也略微知道一些长链剖分的知识,但一直没有机会用上,所以也不算真正学习了,这次在一场比赛之中遇到了类似的题,虽然用dsu on tree的方法O(N log(N))的解决了,但是想到如果N够大的时候,卡了这个log,那么我们就需要线性O(N)的时间来解决这个问题了。 类比轻重链剖分,长链剖分的精髓就在于将原来以子树size作为评定轻重的标准,变成了子结...原创 2020-03-30 16:58:55 · 469 阅读 · 0 评论 -
XOR TREE【牛客练习赛58 F】【树链剖分】
题目链接这个问题很容易想到之间的关系,假设现在所要查询的这条链上有V1、V2、…… VK个点,那么第i个点的贡献在抑或中出现的次数XOR为当K为偶数时候,F(i)恒定为奇数 当K为奇数的时候,F(i)在i为偶数的时候F(i)为奇数 只有F(i)为奇数的时候,在抑或XOR中才有作用 于是,如果K为偶数的时候,我们直接求这条链上所有值的抑或XOR和即可,树链剖分就可以很好的维护了。...原创 2020-03-17 15:44:11 · 312 阅读 · 0 评论 -
DFS spanning tree【贪心+树链剖分】
题目链接 HDU - 4582在开始解决这个问题之前,我们来解决如下一个问题:有一段总长度为N的连续点集,现在给出M个区间段[Li, Ri]使得每个区间段中至少有一个点被染色,问最少需要染色多少个结点?(使用Nlog时间复杂度)解:这个问题其实是一个贪心的过程,譬如说,我们先对R区间升序排序,然后呢,对于每个Li,我们只要知道它是否是在现在的已有的R区间包含内的,就可知道是否是需要新添...原创 2020-03-07 15:19:06 · 329 阅读 · 0 评论 -
One-Way Conveyors 【Tarjan缩点+树链剖分】
One-Way ConveyorsAizu - 1408 这道题上面推荐大家把maxN开的大一点,不然会RE,我倒是被这个坑了一下,还有一些细节,我将在后面徐徐道来。(目前最快还是比较的开心) 先讲一下题意:有N个点,M条无向边,然后输入这M条无向边,再是一个K,表示我们有K个要求,每个u到v,我们现在要把原来的无向图变成有向图,也就是给每条边定向,还要满足所有K个u到v都要...原创 2020-02-18 21:25:12 · 630 阅读 · 0 评论 -
[BeiJing2013]压力【广义圆方树+树链剖分】
BZOJ 3331 求每个点被作为割点的次数,于是我们可以用树链剖分直接构树然后区间维护一下即可。 首先,圆方树使得原图变成一棵树,然后就是基础的树上查询问题了,当然,用LCA做树上差分也是可以的。#include <iostream>#include <cstdio>#include <cmath>#include <string...原创 2020-02-18 11:27:58 · 208 阅读 · 0 评论 -
Tourists【广义圆方树+树链剖分+方点的特别优化】
TouristsCodeForces - 487E 题意:有N个点,M条边,有Q次询问,每次有两种询问的方式:C X Y 将X点的权值改变成Y A U V询问从u到v的不经过重复点的路径上的最小点权 所以,看到有环的问题,就是直接往圆方树上套了,直接缩点,然后我们对缩点之后的树进行处理,于是我不经过任何优化的TLE在了第18组。为什么会TLE呢?其实很简单,就是我们需要去给方...原创 2020-02-18 10:44:47 · 329 阅读 · 0 评论 -
最短距离 P4949【树链剖分】
题目链接 有N个点,N条边构成的连通图的话,那么其实就是比树多了一条边,我们可以把多出来的任意一条可替换边存出来,然后对剩下的点来看是要直接走,还是经过这条边的呢?那么,就是树链剖分的维护操作了。#include <iostream>#include <cstdio>#include <cmath>#include <string>...原创 2020-01-31 13:57:21 · 169 阅读 · 0 评论 -
Water Tree 【CodeForces - 343D】【树链剖分】
题目链接 有N个点的树,我们有Q次操作,分别是将以v为根结点的子树全部放满为1; 将v到根结点(1)的链上清空为0; 查询v结点是空还是有的。 所以,虽然挂在了Dsu on Tree的板块上晃了我一手,但还是想到了,应该考虑时间线,所以就用树链剖分来维护一下就可以了。#include <iostream>#include <cstdio>#inc...原创 2020-01-06 19:39:06 · 137 阅读 · 0 评论 -
Carpet【2017-2018 ACM-ICPC, NEERC, Moscow Subregional Contest C】【重链剖分 or 思维拓扑+BFS】
题目链接 gym 101611 2017-2018 ACM-ICPC, NEERC, Moscow Subregional Contest Problem C 先讲讲比赛的时候队友想出来的方法(外加我千辛万苦敲出来,错了3发找了3处bug最后封榜后过的)。 很多人都会想到这样的一个问题:如果是一条长链,或者是一个菊花图呢(一个根结点,下面1e5个点)。这是两种不同的类型。解法一:...原创 2019-10-13 09:35:04 · 314 阅读 · 0 评论 -
树链剖分题集【已经建立好,点开即可】
题目链接 密码:MyAcmLife原创 2018-11-27 16:04:54 · 216 阅读 · 2 评论 -
树上求和【牛客小白月赛9-D】【树链剖分】
题目链接还不懂树链剖分的小伙伴可以看这里,以及我的学习笔记都在里面 一道很基本的树链剖分,但是要推一个关于处理平方和的公式:X1^2+X2^2+......+Xn^2;有(x+y)^2=X^2+Y^2+2xy,那么多几个x、y也是成立的:(X1+X2+X3+......+Xn+Y)=X1^2+X2^2+......+Xn^2+2*(X1+X2+X3+......+Xn)*Y+Y^2。...原创 2018-11-28 12:36:20 · 214 阅读 · 0 评论 -
Aragorn's Story 【HDU - 3966】【树链剖分】
题目链接树链剖分的学习笔记(更新中) 这道题所给的Hint好有迷惑性,它跟我们说注意士兵的数量可能为负数,我的第一反应是,士兵的数量是不是不能为负数,那么我们是不是要做出些什么调整,然而,语文不好的我看了Discuss才知道说的是:士兵的数量可以为负数。这样也好,题目就变成了一道简单的树链剖分问题了,我们只需要记录每个节点的深度,以及它的最顶节点,然后边更新就是了。#include...原创 2018-11-28 16:21:08 · 165 阅读 · 0 评论 -
Jiu Yuan Wants to Eat【2018焦作网络赛】【树链剖分】
题目链接树链剖分学习笔记,可以看这里 这道题还真挺好的,以前不会做,现在想了发现,学过树链剖分之后,剩下的部分就是处理去反那块比较的不容易些了,但是想了一下午,现在还是给我敲出来了,我们主要难处理的就是关于求反,那么怎么处理求反? 一开始读题的时候,我还在想,是不是求反是与此数的最大2次幂系数开始,后来推了测试样例,发现,是直接对64为比特位都求反,那么我们似乎可以推一个公式了,因...原创 2018-11-28 20:36:05 · 212 阅读 · 0 评论 -
Query on a tree 【SPOJ - QTREE】【树链剖分+线段树区间最大值】
题目链接 一道树链剖分的基础题,我的做法可能与广大网友不大一样,我将边也算做是一个点,然后相当于是把两个端点相互连接在边所代表的那个点上,这样更新边就变成了更新点,查询就是区间查询。 一开始读了道假题做了半天(最近总是在读假题……),还以为是区间和,然后看到区间边长最大值的时候,我整个人都奔溃了!!!#include <iostream>#include <c...原创 2018-12-12 20:46:52 · 182 阅读 · 0 评论 -
Tree 【POJ - 3237】【树链剖分+一些特殊的处理】
题目链接 这道题,说来还的确困扰了我一个多小时,当时就在想,我该如何处理那些边权(我将边化为点)以及点(默认权值为0)的取相反数后的处理(因为点取相反数之后还是0),会困扰到那些边的。 然后,我想到了,如果这段区间的返回的值为0,那么就说明了肯定是点的,我们不妨返回的是(-INF)即可。然后,再pushup()的时候,也做了相似的处理,毕竟,两点之间确定一条边,所以,我们线段树的操作的...原创 2019-01-05 16:40:03 · 100 阅读 · 0 评论 -
Apple Tree【树链剖分模板题】
There is an apple tree outside of kaka's house. Every autumn, a lot of apples will grow in the tree. Kaka likes apple very much, so he has been carefully nurturing the big apple tree.The tree has N ...原创 2019-01-14 13:37:46 · 514 阅读 · 0 评论 -
Propagating tree 【CodeForces - 383C】【线段树+树链剖分】
题目链接题意:有一颗 N 个节点的树,树根编号为 1。树的每个节点有一个权值 A_i,树上有 N-1 条边 (u_i, v_i)。现在,你要对这棵树进行 Q 次 下列操作之一。操作1:选定一个节点 x,将其权值加上 val,将其儿子的权值减去 val,将其儿子的儿子的权值加上 val … 加减操作会在叶节点完成后终止。操作2:询问节点 x 的点权。思路: 既然有这样的更...原创 2019-03-06 21:06:38 · 237 阅读 · 0 评论 -
Chino with Rewrite【树链剖分】【2019西北工业大学程序设计创新实践基地春季选拔赛.I题】
题目链接题目描述:Chino的数学很差,因此Cocoa非常担心。这一天,Cocoa准备教Chino如何出题。«Rewrite»是Key社的一款非常好玩的文字冒险游戏,在游戏的背景设定里,かがり需要完成一棵世界树的重构,重写这个世界。这很像出题呢,一开始只有几个零星的idea,慢慢地把它们组织到一起,变成了一道完整的题目。Cocoa告诉Chino应该按照如下的方式出题:1、起初,平面...原创 2019-04-20 10:36:31 · 260 阅读 · 0 评论 -
Can you answer these queries VII 【SPOJ - GSS7】【树链剖分 最大子段和】
题目链接 造了好多组样例,最后的时候发现,竟然是update的时候区间的更新并没有完全更新到位,导致最后变成WA了,竟然是WA了后面的几组,还让我一度以为是找区间的时候出现了问题。 然后剩下的就是一些简单的线段树了,最难处理的不过是在树上公公祖先的那部分,debug200+行的代码真的挺难的,尤其是今早的时候灵光闪现!#include <iostream>#incl...原创 2019-08-12 08:58:33 · 146 阅读 · 0 评论 -
树链剖分学习日记
树链剖分【11月27日星期二晴】先【下认识树链剖分的概念】从大佬处摘录而来,先认识下概念。树链剖分就是对一棵树分成几条链,把树形变为线性,减少处理难度需要处理的问题:将树从X到ý结点最短路径上所有节点的值都加上ž 求树从X到ý结点最短路径上所有节点的值之和 将以X为根节点的子树内所有节点值都加上ž 求以X为根节点的子树内所有节点值之和概念重儿子:对于每一个非...原创 2018-11-27 09:42:54 · 446 阅读 · 2 评论