![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构——树链剖分
文章平均质量分 84
Cabinfever
这个作者很懒,什么都没留下…
展开
-
[BZOJ4034][HAOI2015]T2 树链剖分+dfs序
常规题,比较特殊的操作是修改以x为根的子树的所有节点我们知道,这颗子树的dfs序一定是连续的,所以我们只需要对每个节点记录一下,最大的dfs序即可因为树剖要dfs,所以我们直接在第二次dfs时记录,但需要注意的是,因为我们最先对重链的节点编号,所以dfs时也必须先dfs重链我采取的办法是直接加边,因为边表保证了最后加的边最先扩展,或者也可以直接记录一下重边连的(因为longlo原创 2016-11-02 22:09:00 · 451 阅读 · 0 评论 -
[BZOJ2157] 旅游 边权树链剖分
对于边权,我们将其赋值到树边的子节点上就好查询,修改时,只需要在两点都在一条重链时,序号小的点+1即可(x,y,min,max写混WA了一发,气,另外需要改一改线段树的写法了,又臭又长)/************************************************************** Problem: 2157 User: cabinfever原创 2016-11-03 21:13:17 · 626 阅读 · 0 评论 -
树链剖分学习
(之前写过树剖的题,但没有完全理解,现在又无法复述思路了,所以重新学习一下,部分语句参考大神的叙述)一、概念 树链剖分,顾名思义,树是由一根根树链组成的,我们现在要来把它按链来分解掉。我们知道,大部分树上的问题都是围绕树的路径来做文章,分解成一条条的链之后,我们就可以对节点(边)就行编号了,而同一根链,编号是连续的,这样就转化为了区间问题,我们就可以使用线段树等姿势来解决修改、原创 2016-10-31 18:52:46 · 306 阅读 · 0 评论 -
[BZOJ1036][ZJOI2008]树的统计Count
树剖板子题为什么都这么长啊,手痛改了值没更新,怒WA两发,我不要BZOJ的WA起飞啊#include #include #include #include #include #include #include using namespace std;const int maxn = 30100;struct edge{ int v,next;}e[maxn原创 2016-11-01 01:06:34 · 291 阅读 · 0 评论 -
BZOJ 3626 LCA 树链剖分
题目链接:bzoj3626题目大意:给出一个有根数,对于询问l,r,z,求出求在[l,r]区间内的每个节点i与z的最近公共祖先的深度之和题解:引用清华爷gconeice的题解显然,暴力求解的复杂度是无法承受的。考虑这样的一种暴力,我们把 z 到根上的点全部打标记,对于 l 到 r 之间的点,向上搜索到第一个有标记的点求出它的深度统计答案。观察到,深度其实就是原创 2016-10-31 18:57:33 · 276 阅读 · 0 评论 -
[BZOJ2243][SDOI2011]染色
(fx,x写反了,还有个地方没加括号,都能过样例,RE好多发)比较简单的树剖,需要注意的地方是因为分成了几段区间求解,所以每次都需要判断边界颜色是否相同,相同答案就要减1。代码还是有点长,跑得还算快/************************************************************** Problem: 2243 User: c原创 2016-11-01 23:43:36 · 290 阅读 · 0 评论 -
HDU5029 Relief grain 树链剖分+差分统计答案
大致题意:给出一棵n个节点有根树,现在给m个x、y,使得x到y路径上所有点加上标记z,现需要统计每个节点中数量最多的标记种类先考虑线性序列,在x-y添加标记z,利用差分思想,在x处添加z,在y+1减去z,然后用一个维护标记数的线段树顺序维护,每个节点询问数量最多的节点即可。然后树型结构转线性,利用树剖即可。#include #include #include #inc原创 2017-02-25 01:44:42 · 370 阅读 · 0 评论