![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树链剖分
文章平均质量分 95
seeeagull
这个作者很懒,什么都没留下…
展开
-
[洛谷P3258] [JLOI2014]松鼠的新家(树链剖分)
直接树链剖分,依次把从ai到ai+1的路径上的点都+1。最后输出时除了a1其他都-1,因为从上一个点到这个点和从这个点出发总共加了两次。#include<cstdio>#include<cstring>const int N=300010;struct edge{ int y,next;}data[N*2];struct node{ int a,b,s;...原创 2019-01-21 13:49:43 · 105 阅读 · 0 评论 -
[洛谷P2486] [SDOI2011]染色(树链剖分)
明显可以树链剖分。线段树每个节点需要维护这个区间的段数s,下放标记f,还有区间最左的颜色l和最右的颜色r。往上推的时候,s为左右两段的s之和,如果左边的r和右边的l相等,s要-1。在树链剖分求路径上总s时,再把每一段加起来同时,还要判断上一次的终点和这一次的起点颜色是否相同,相同的话也要-1。因为是x和y同时跳,所以同时记录prex和prey,线段树查询时多传递两个值为这一段的起点和终点颜色,...原创 2019-01-22 16:16:52 · 95 阅读 · 0 评论 -
[P4211][LNOI2014]LCA(树链剖分+差分)
一个节点的深度,就是这个节点到根的路径上的节点数,所以所求可转化为 l 到 r 区间内每个节点到根与 z 到根的公共路径上点数之和。修改和查询的路径一定是某节点到根,用树链剖分来维护。但每次都从 l 到 r 添加贡献再还原肯定不可行。我们能发现不同询问区间可能有重叠,似乎可以离线做;维护的又是公共点数的和,是可减的,能用差分求出。所以最终只要按顺序把节点 i 到根的值都+1,然后遇到询问就查询...原创 2019-05-20 15:56:55 · 159 阅读 · 0 评论