树链剖分
Hanks_o
一名。
展开
-
bzoj1036: [ZJOI2008]树的统计Count(树链剖分)
题目传送门 树链剖分模板吧。 不过用LCA好像也是可以的。(表示懒得用)树链剖分: dep[x]:表示x的深度,深度越大离根越远。 fa[x]:表示x的父亲节点。 tot[x]:表示以x为根的子树的家族数量。 son[x]:x的重儿子,选取家族数量最多的子节点作为重儿子。 每一个节点连接自己的重儿子,那么就会出现链,称为重链。 对于同一原创 2017-09-16 10:12:42 · 463 阅读 · 0 评论 -
bzoj1103: [POI2007]大都市meg(树链剖分)
题目传送门 模板题吧。 没学过树链剖分看这里这道题大概也差不多。 因为这道题是维护边的权(是土路值为1,公路值为0) 求得就是某一个点到1的边权和。 那么我们要把边的值赋值到点上如何做呢? 就把每条边的权值赋值到下面的点上。 代码里面有详细解释。代码实现:#include<cstdio>#include<cstring>#include<cstdlib>#include<iost原创 2017-09-27 13:39:04 · 364 阅读 · 0 评论 -
bzoj4034: [HAOI2015]树上操作(树链剖分+线段树)
题目传送门 水经验。解法: 就写个树剖呗。 然后用线段树维护一下呗。 维护整一段的和。 打个懒标记。代码实现:#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>#include<cmath>#include<queue>using namespace s原创 2017-10-30 11:23:14 · 398 阅读 · 0 评论 -
bzoj2243: [SDOI2011]染色(树链剖分+线段树)
题目传送门 开心的我又看错了题目。一开始看成是一段序列了那直接上线段树不就完了呗。 打个懒标记。维护一下区间有多少种颜色以及边界都是什么颜色。 打完了代码又去看题。发现是在一棵树上。。 哦那就加个树剖呗。解法: 线段树维护四个特征值: 区间内有多少段颜色。 区间内颜色是否统一,统一的话是什么颜色。 区间左端点是什么颜色。 区间右端点是什么颜色。 然后上树剖。 如果当前这一段跟上原创 2017-10-23 10:46:31 · 292 阅读 · 0 评论 -
bzoj3631: [JLOI2014]松鼠的新家(树链剖分)
题目传送门 一道大水题。解法: 简单的树剖。 到这个点这个点就要加1。 线段树维护。 这题有一点点坑就是除了第一个点其他最后到的点都要少一颗糖果。 因为他去吃大餐了。代码实现:#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm>#include<cmath>原创 2017-12-14 08:46:04 · 332 阅读 · 0 评论 -
bzoj2157: 旅游(树链剖分)
题目传送门 呵呵呵。解法: 没学过树剖看这里 很水很水的树剖? 整段取反就打个lazy嘛。列举各种情况。 就会发现,取反时: 最大值等于原来最小值取反,最小值等于原来最大值取反。其他维护最大值最小值和就没什么了吧。代码实现:#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<al原创 2018-01-03 13:26:34 · 322 阅读 · 0 评论 -
bzoj4551: [Tjoi2016&Heoi2016]树(树链剖分)
题目传送门 。解法: 树剖套线段树。 维护区间最右标记。代码实现:#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>using namespace std;struct node {int x,y,next;}a[210000];in...原创 2018-03-12 19:52:27 · 214 阅读 · 0 评论 -
bzoj3626: [LNOI2014]LCA(离线处理+树链剖分)
题目传送门 。解法: 对于任意一个询问: l r z 对于任意一个点来说。他对答案的贡献实际上是LCA(i,z)的深度。 也就是lca到根的点数。 那么我们可以每个点到根的路径都加1。然后询问下z到根的路径上的答案总和其实就是答案啊。 显然可以分成两个区间,一个1到l-1,一个1到r。l到r的答案用两个答案相减,正确性显然。那么离线处理。 把每个操作都分成两个区间。 然后...原创 2018-03-20 16:11:38 · 453 阅读 · 0 评论 -
bzoj3531: [Sdoi2014]旅行(树链剖分+线段树)
题目传送门 。解法: 据说叫动态开点。 需要用的点才建线段树。 那么最多只有二十万种不同的信息。。 跟主席树一样嘛。 YY就好了代码实现:#include<cstdio>#include<cstring>#include<cstdlib>#include<iostream>#include<algorithm...原创 2018-04-22 16:27:30 · 270 阅读 · 0 评论