树链剖分
A_Comme_Amour
胜利油田第一机房
展开
-
[模板]树链剖分讲解与模板
树链剖分的思想比较神奇 它的思想是:把一棵树拆成若干个不相交的链,然后用一些数据结构去维护这些链 重儿子:该节点的子树中,节点个数最多的子树的根节点(也就是和该节点相连的点),即为该节点的重儿子 重边:连接该节点与它的重儿子的边 重链:由一系列重边相连得到的链 轻链:由一系列非重边相连得到的链 变量声明: son重儿子; tot子树的大小; top该点所在重链头; d...原创 2018-02-27 07:11:03 · 283 阅读 · 0 评论 -
[ZJOI2008]树的统计(树链剖分+线段树)
题目 传送门 题解 板子题 代码 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; const int maxn=1000005; int n,m,x,y,a[maxn],sum[maxn<<2],add[maxn<<...原创 2018-02-28 13:29:38 · 226 阅读 · 0 评论 -
[bzoj4034][HAOI2015]树上操作(树链剖分+线段树)
题目 传送门 操作 1 :把某个节点 x 的点权增加 a 。 操作 2 :把某个节点 x 为根的子树中所有点的点权都增加 a 。 操作 3 :询问某个节点 x 到根的路径中所有点的点权和 题解 模板题 代码 #include<cstdio> #include<cstring> #include<algorithm> using namespace...原创 2018-02-28 16:15:38 · 248 阅读 · 0 评论 -
[SLYZ寒假测试]2018.3.1
T1草地排水 sb的最大流 T2noi2015软件包管理器 传送门 这道题有5个同学A了这道题,不算是很难的。然而我就在考场上打暴力。 这题可以说是链剖的裸体了。并且运用了差分的思想 首先软件存在权值为1,不存在权值为0. - install操作 查询x到根节点的路径权值和,然后与x的deep做差,之后把点的权值都修改成1 - uninstall操作 查询以x为根的子树...原创 2018-03-01 17:32:44 · 264 阅读 · 0 评论 -
[bzoj4196] [Noi2015]软件包管理器 (树链剖分)
题目 传送门 题解 这题可以说是链剖的裸体了。并且运用了差分的思想 首先软件存在权值为1,不存在权值为0. - install操作 查询x到根节点的路径权值和,然后与x的deep做差,之后把点的权值都修改成1 - uninstall操作 查询以x为根的子树的权值和。然后删除 一个小技巧:注意把点权修改成1而不是累加,可以 sum[rt]=(r-l+1)*C;//这里...原创 2018-03-03 21:41:17 · 353 阅读 · 0 评论 -
「BZOJ2243」[SDOI2011] 染色(线段树+树链剖分)
题目 传送门 1、将节点a到节点b路径上所有点都染成颜色c; 2、询问节点a到节点b路径上的颜色段数量(连续相同颜色被认为是同一段), 如“112221”由3段组成:“11”、“222”和“1”。 请你写一个程序依次完成这m个操作。 题解 这道题很好; 可以看出框架就是树链剖分,就是线段树比较复杂: 使用cl表示区间左端点的颜色,cr表示右端点的颜色,num表示区间内颜色区段的个数...原创 2018-03-31 14:10:35 · 244 阅读 · 0 评论 -
[USACO11DEC]牧草种植Grass Planting(树链剖分)
题目 传送门 题解 这道题就是把树链剖分中的点标记改成了边的标记,然后我就不会做了; 我么发现,每一个点对应着多个孩子,但是只有一个父亲,于是我们就可以把某个点到父亲的点的边的权值转移到这个点上; 如何防止把最近公共祖先也标记上,这就是树链剖分的一点小变形,找完连头之后左端点+1; 还是对算法理解的不够深刻。 代码 #include <cstdio> #include ...原创 2018-04-01 22:16:42 · 388 阅读 · 0 评论