树链剖分
SC.ldxcaicai
我很菜=_=
展开
-
洛谷P1505 [国家集训队]旅游(树链剖分)
旅游 题目描述 Ray 乐忠于旅游,这次他来到了T 城。T 城是一个水上城市,一共有 N 个景点,有些景点之间会用一座桥连接。为了方便游客到达每个景点但又为了节约成本,T 城的任意两个景点之间有且只有一条路径。换句话说, T 城中只有N − 1 座桥。Ray 发现,有些桥上可以看到美丽的景色,让人心情愉悦,但有些桥狭窄泥泞,令人烦躁。于是,他给每座桥定义一个愉悦度w,也就是说,Ray 经过...原创 2018-06-29 23:18:05 · 329 阅读 · 0 评论 -
bzoj5466: [Noip2018]保卫王国(链分治+ddp)
传送门题意简述:mmm次询问,每次规定两个点必须选或者不选,求树上的带权最小覆盖。思路:考虑链分治+ddpddpddp仍然是熟悉的套路,先考虑没有修改的状态和转移:令fi,0/1f_{i,0/1}fi,0/1表示强制iii不选/选时iii为根子树的带权最小覆盖。显然有:fi,0=∑v∈sonfv,1f_{i,0}=\sum_{v\in son}f_{v,1}fi,0=∑v∈s...原创 2019-02-16 09:59:53 · 537 阅读 · 0 评论 -
bzoj5210: 最大连通子块和(链分治+ddp)
传送门题意:支持单点修改,维护子树里的最大连通子块和。思路:扯皮:bzojbzojbzoj卡常差评。网上的题解大多用了跟什么最大子段和一样的转移方法。但是我们实际上是可以用矩阵转移的传统ddpddpddp写法来做这道题的。由于我推出来矩阵是3∗33*33∗3的因此常数巨大gggggg了,因此蒟蒻博主只能提供思路和一份TLETLETLE的代码。正题:一道考虑链分治+dpdpdp套...原创 2019-02-15 18:51:07 · 472 阅读 · 0 评论 -
线段树(合并/分治)&&重/长链剖分&&主席树专题(持续更新中)
常规线段树(简单)模板 树剖区间取负,单点修改维护最大最小总和 单点修改维护根节点乘积 维护区间连续(0/1)(0/1)(0/1)的长度 根据逆序对数还原排列 双指针+线段树永久化标记 505050多棵线段树动态开点 线段树(树状数组)求逆序对 单点插入区间查询 区间开根区间求和 单点修改区间最大连续和线段树与算法(简单)优化dpdpdp 线段树合并 李超线...原创 2018-07-28 16:01:09 · 3199 阅读 · 9 评论 -
bzoj2238: Mst(kruskal+树链剖分)
传送门树链剖分菜题。题意简述:给一个无向图,边有边权,每次询问删一条边(对后面的询问无影响)之后的最小生成树。思路:先跑一次kruskalkruskalkruskal并把跑出来的最小生成树给链剖了。然后考虑如果没有删掉树边答案不变,如果删掉一条能够接上的就只有覆盖了这条边的路径,因此对于每条非树边都用来更新一次树边的信息,O(1)O(1)O(1)处理询问即可。注意要转边为点代码:...原创 2019-01-20 23:16:27 · 238 阅读 · 0 评论 -
bzoj3999: [TJOI2015]旅游(树链剖分)
传送门树链剖分菜题。题意不清差评。题意简述(保证清晰):给一棵带权的树,每次从aaa走到bbb,在走过的路径上任意找两个点,求后访问的点与先访问的点点权差的最大值。思路:考虑暴力:维护路径的前缀最小值和后缀最大值然后更新答案。然后可以用线段树优化这个过程。对于当前的线段树节点,它的答案=max(左儿子答案,右儿子答案,右儿子最大值−左儿子最小值)max(左儿子答案,右儿子答案,右儿...原创 2019-01-20 14:35:13 · 189 阅读 · 0 评论 -
codeforces343D.Water Tree(树剖+ODT)
传送门ODTODTODT板子题。支持子树01覆盖,路径01覆盖,询问一个点的值。思路:当然可以用树剖+线段树,不过树剖+ODTODTODT也可以很好的水过去。注意修改路径时每次跳重链都要修改。不会ODTODTODT的点这里代码:#include<bits/stdc++.h>#define ri register intusing namespace std;inl...原创 2019-01-19 14:25:18 · 417 阅读 · 0 评论 -
codeforces 1009F. Dominant Indices(长链剖分)
传送门长链剖分模板题。题意:给出一棵树,设fi,jf_{i,j}fi,j表示iii的子树中距离点iii距离为jjj的点的个数,现在对于每个点iii要求出使得fif_ifi取得最大值的那个jjj。思路:有一个明显的状态转移式fi,j=∑v∈sonifv,j−1f_{i,j}=\sum_{v\in son_i}f_{v,j-1}fi,j=∑v∈sonifv,j−1,那么考虑对这棵树...原创 2019-01-08 17:04:24 · 309 阅读 · 0 评论 -
bzoj4538: [Hnoi2016]网络(树链剖分)
传送门树链剖分一眼题。题意简述:给定一棵树,有三种操作:加入一条路径删除一条已加入的路径询问不过一个点x的路径的最大值。思路:直接树链剖分维护答案。因为询问的事不过点xxx的最大值,因此对于一条路径我们只需要修改它的补集。考虑到树上一条到根节点的路径映射到序列上只有logloglog段,因此它的补集也只有logloglog段,这样就可以修改了。然后有了一种叫做删除的操作...原创 2019-01-13 21:24:21 · 226 阅读 · 0 评论 -
spoj Query on a tree IV(链分治)
传送门题意简述:捉迷藏强化版(带有边权,可以为负数)思路:好吧这次我们不用点分树,我们用听起来更屌的链分治。直接把树剖成若干条重链,这样保证从任意一个点跳到根节点是不会跳超过logloglog条重链的。然后用上链分治的常规套路:分是否在链上面的信息讨论,并将整条链的值全部统计在链顶,这样修改的时候沿着链往上跳修改logloglog次即可。那么针对这道题可以怎么瞎搞维护呢?考虑对每个...原创 2019-02-16 17:13:32 · 213 阅读 · 0 评论 -
spoj Query on a tree V(链分治)
传送门题意简述:给你一棵nnn个黑白点的树,初始全是黑点。现在支持给一个点换颜色或者求整颗树中离某个点最近的白点跟这个点的距离。思路:考虑链分治维护答案,每个链顶用一个堆来维护答案,然后对于每条重链开一棵线段树维护子树里所有白点到线段树最左/右端点的最短距离。然后瞎更新查询即可。代码:#include<bits/stdc++.h>#define ri registe...原创 2019-02-17 10:35:38 · 274 阅读 · 0 评论 -
NOIp训练 子串查找VII(树剖+ac自动机+dfs序+bit套主席树)
传送门题意:有一棵nnn个点的无根树,第iii个点上有一个字符串sis_isi作为编号和一个权值viv_ivi,现在有mmm次强制在线的询问/修改。询问:给出一个字符串SSS和一条路径(u,v)(u,v)(u,v),路径上iii点的贡献是sis_isi在SSS中出现次数*viv_ivi,问总贡献。时间复杂度:O(nlogn3),∑∣si∣,∑∣S∣,n,mO(nlogn^3),\s...原创 2019-07-17 19:36:24 · 247 阅读 · 0 评论 -
bzoj4448: [Scoi2015]情报传递(归并排序+树链剖分)
传送门题意简述:给一棵nnn个点的树,树上每个点表示一个情报员,一共有mmm天,每天会派发以下两种任务中的一个任务:1.搜集情报:指派T号情报员搜集情报2.传递情报:将一条情报从X号情报员传递给Y号情报员一个情报员在搜集情报之前危险度为000,从开始搜集的第二天起每天危险度加一。每条情报都有一个风险控制值C,现在要求对于每个任务,参与传递的情报员有多少个,其中对危险度大于这条情报的CC...原创 2019-03-26 14:31:46 · 189 阅读 · 0 评论 -
COGS2652 秘术(天文密葬法)(分数规划+长链剖分)
传送门题意:nnn个点的树,每个点两个值a,ba,ba,b,问长度为mmm的路径∑ai∑bi\frac{\sum a_i}{\sum b_i}∑bi∑ai的最大值。思路:一眼要01分数规划,考虑checkcheckcheck可以用点分治水掉。然而也可以用长链剖分,复杂度降低一个logloglog。代码:#include&lt;bits/stdc++.h&gt;#define r...原创 2019-03-11 18:43:24 · 178 阅读 · 0 评论 -
bzoj4999: This Problem Is Too Simple!(树链剖分+线段树动态开点)
传送门题意:给一颗树,每个节点有个初始值,要求支持将i节点的值改为x或询问i节点到j节点的路径上有多少个值为x的节点。思路:考虑对每种颜色动态开点,然后用树剖+线段树维护就完了。代码:#include<bits/stdc++.h>#define ri register intusing namespace std;inline int read(){ int ...原创 2019-03-09 11:01:59 · 239 阅读 · 0 评论 -
NOIp训练 [SCOI2018]Tree(链分治)
传送门题意:给一棵带点权的树,要求支持如下操作:询问从 U 出发的简单路径,经过的点权值之和的最大值将 U 的权值修改为 V空间限制64MB思路:你可以使用一种叫做点分树的无脑方法,然后用short+charshort+charshort+char拼34\frac3443个intintint可以通过这一道题。 毕竟毒瘤出题人卡了空间你显然也可以上lctlctlct搞。博主懒...原创 2019-07-17 20:37:58 · 306 阅读 · 0 评论 -
spoj GSS系列简要题解
文章目录GSS1GSS2GSS3GSS4GSS5GSS6GSS7GSS8[传送门](https://vjudge.net/problem#OJId=SPOJ&amp;amp;amp;probNum=GSS&amp;amp;amp;title=&amp;amp;amp;source=&amp;amp;amp;category=all)这个GSSGSSGSS系列全部是跟子段有关的数据结构菜题。于是来水一篇博客。GSS1传送门题意简述:原创 2019-02-19 00:24:15 · 315 阅读 · 0 评论 -
spoj Query on a tree VII(链分治)
传送门跟QTREE6QTREE6QTREE6神似,改成了求连通块里的最大值。于是我们对每条链开一个heapheapheap维护一下即可。MDMDMD终于1A1A1A链分治了。代码:#include<bits/stdc++.h>#define ri register int#define fi first#define se secondusing namespace ...原创 2019-02-17 14:28:30 · 325 阅读 · 0 评论 -
spoj Query on a tree VI(链分治)
传送门题意简述:给你一棵nnn个黑白点的树,支持改一个点的颜色,询问跟某个点颜色相同的连通块大小。思路:还是链分治 233记fi,0/1f_{i,0/1}fi,0/1表示iii的所有颜色为0/10/10/1的轻儿子在它们子树中颜色相同的连通块大小。然后这个可以用来询问子树里的答案,但是要询问的东西是针对全局的。因此我们沿着重链往上跳更新答案,直到某条链中有点跟要问的颜色不一样。即...原创 2019-02-17 14:08:06 · 215 阅读 · 0 评论 -
=bzoj1146: [CTSC2008]网络管理Network(整体二分+树剖)
传送门题意简述:给一棵树,支持单点修改,询问路径上两点间第kkk大值。思路:读懂题之后立马可以想到序列上带修区间kkk大数的整体二分做法,就是用一个bitbitbit来支持查值。那么这个题把树状数组放到树上用树链剖分维护一下即可。代码:#include<bits/stdc++.h>#define ri register intusing namespace std;...原创 2019-01-13 16:47:37 · 221 阅读 · 0 评论 -
vijos lxhgww的奇思妙想(长链剖分)
传送门长链剖分模板题。题意简述:允许O(nlogn)O(nlog_n)O(nlogn)预处理,让你支持O(1)O(1)O(1)查找任意一个点的kkk级祖先。思路:因为要O(1)O(1)O(1)求,因此需要用到长链剖分的一些性质。所谓长链剖分是类比重链剖分的一种划分树的方式,我们考虑将整棵树用若干条极长链拼接起来就是长链剖分。那么它有如下几个几个性质:所有长链的长度之和为O(n)O...原创 2019-01-06 22:31:12 · 205 阅读 · 0 评论 -
2018.08.30 NOIP模拟 graph(dfs序/树剖+线段树)
【描述】给你一个图,一共有 N 个点,2*N-2 条有向边。 边目录按两部分给出 1、 开始的 n-1 条边描述了一颗以 1 号点为根的生成树,即每个点都可以由 1 号点 到达。 2、 接下来的 N-1 条边,一定是从 i 到 1(2&amp;lt;=i&amp;lt;=N)的有向边,保证每个点都能到 1 有 q 次询问: 1 x w :表示将第 x 条边的边权修改为 w 2 u v :询问 ...原创 2018-10-11 23:33:50 · 316 阅读 · 0 评论 -
2018.08.27【模板】树链剖分换根(模板)
描述给定一棵大小为 n 的有根点权树,支持以下操作: • 换根 • 修改点权 • 查询子树最小值输入第一行两个整数 n, Q ,分别表示树的大小和操作数。 接下来n行,每行两个整数f,v,第i+1行的两个数表示点i的父亲和点i的权。保证f < i。如 果f = 0,那么i为根。输入数据保证只有i = 1时,f = 0。 接下来 m 行,为以下格式中的一种: • V...原创 2018-08-27 21:55:25 · 895 阅读 · 0 评论 -
2018.08.22 codves2370 小机房的树(lca+树上差分)
传送门一道板子题。直接树链剖分维护树上lca然后差分就行了。代码:#include<bits/stdc++.h>#define N 50005#define lc (p<<1)#define rc (p<<1|1)#define mid (T[p].l+T[p].r>>1)using namespace std;str...原创 2018-08-22 13:55:25 · 94 阅读 · 0 评论 -
2018.08.09 bzoj4719: [Noip2016]天天爱跑步(树链剖分)
传送门 话说开始上文化课之后写题时间好少啊。 这道题将一个人的跑步路线拆成s-&amp;gt;lca,lca-&amp;gt;t,然后对于第一段上坡路径要经过的点,当前这个人能对它产生贡献当且仅当dep[s]-dep[i]==w[i],对于第二段路径同理能产生贡献当且仅当dep[t]-dep[i]==dis(s,t)-w[i],同时需要看lca有没有被算重,这几个东西一看就可以差分,但差分不仅不好想也不好写,...原创 2018-08-09 21:51:43 · 1002 阅读 · 3 评论 -
2018.07.24 bzoj3531: [Sdoi2014]旅行(树链剖分+动态开点)
传送门 树链剖分。 如何维护? 如果颜色少直接每种颜色一颗线段树走人。 但这题颜色数量不大于1e51e51e5,空间难以承受。 因此我们动态开点(毕竟所有点数加起来只有1e51e51e5) 其余就是树链剖分的基本操作了。代码如下:#include&lt;bits/stdc++.h&gt;#define N 3000005#define lc T[p].l#define r...原创 2018-07-24 21:26:12 · 165 阅读 · 0 评论 -
BZOJ3083: 遥远的国度(换根树剖)
3083: 遥远的国度 Time Limit: 10 Sec Memory Limit: 512 MB Description 描述 zcwwzdjn在追杀十分sb的zhx,而zhx逃入了一个遥远的国度。当zcwwzdjn准备进入遥远的国度继续追杀时,守护神RapiD阻拦了zcwwzdjn的去路,他需要zcwwzdjn完成任务后才能进入遥远的国度继续追杀。 问题是这样的:遥远的国度有n...原创 2018-06-30 23:24:05 · 227 阅读 · 0 评论 -
树的操作(换根树剖)
描述 XXX和 YYY在愉快地刷题。有一道题是这样的:给你一棵 n 个节点的有根树,每个节点有 一个权植。你要支持两种操作:查询以某棵树为根的子树的权值和,给以某个节点为根的整 棵子树的所有点的权值都加上一个值。机智的 XXX 很开心地用LLL教授 讲过的某些东西水水水水过了这道题。但是可怕的出题人又增加了一种操作:将根节点改为第 u 号节点。于是XXX和YYY 就不会 做了。按照一惯的逻辑...原创 2018-06-30 23:19:32 · 1114 阅读 · 0 评论 -
BZOJ4765: 普通计算姬(dfs序+分块+树状数组)
4765: 普通计算姬 Time Limit: 30 Sec Memory Limit: 256 MB Description “奋战三星期,造台计算机”。小G响应号召,花了三小时造了台普通计算姬。普通计算姬比普通计算机要厉害一些。普通计算机能计算数列区间和,而普通计算姬能计算树中子树和。更具体地,小G的计算姬可以解决这么个问题:给定一棵n个节点的带权树,节点编号为1到n,以root为根,...原创 2018-06-30 22:05:55 · 411 阅读 · 0 评论 -
2018.09.16 bzoj3626: [LNOI2014]LCA(树链剖分)
传送门 树链剖分好题。 对于每个点维护一个值viviv_i,当考虑点i时我们将它到根的路径上的所有数的v值+1。 这样维护下来v和dep的值是相等的。 当这个更新到达点i时,从1到z这条路径的v值之和就是∑ij=1dep[lca(j,z)]∑j=1idep[lca(j,z)]\sum _{j=1} ^i dep[lca(j,z)] 这样的话一个询问(l,r,z)可以转化成calc(1,r...原创 2018-09-16 00:19:58 · 159 阅读 · 0 评论 -
2018.09.15 bzoj1977:次小生成树 Tree(次小生成树+树剖)
传送门 一道比较综合的好题。 由于是求严格的次小生成树。 我们需要维护一条路径上的最小值和次小值。 其中最小值和次小值不能相同。 由于不喜欢倍增我选择了用树链剖分维护。 代码:#include<bits/stdc++.h>#define N 100005#define M 300005#define lc (p<<1)#define rc (p&...原创 2018-09-15 15:50:17 · 329 阅读 · 0 评论 -
洛谷P4719 【模板】动态dp(链分治+ddp)
传送门ddpddpddp模板题。题意简述:给你一棵树,支持修改一个点,维护整棵树的最大带权独立集。思路:我们考虑如果没有修改怎么做。貌似就是一个sbsbsb树形dpdpdp,fi,0f_{i,0}fi,0表示不选iii的最大值,fi,1f_{i,1}fi,1表示选iii的最大值。那么可以这样从iii的儿子vvv转移过来:fp,0+=max{fv,0,fv,1},fp,1+=fv...原创 2019-01-04 20:10:32 · 359 阅读 · 0 评论 -
2018.11.09 codeforces487E. Tourists(tarjan+树链剖分)
传送门先把边双连通分量用圆方树一样的方法缩点,然后把新建的树树剖维护。注意对于边双连通分量需要维护动态最小值,可以用multisetmultisetmultiset。代码:#include<bits/stdc++.h>#define lc (p<<1)#define rc (p<<1|1)#define mid (T[p].l+T[p].r>...原创 2018-11-09 21:27:39 · 1211 阅读 · 0 评论 -
2018.11.03 NOIP模拟 树(长链剖分优化dp)
传送门考虑直接推式子不用优化怎么做。显然每一个二进制位分开计算贡献就行。即记录fi,jf_{i,j}fi,j表示距离iii这个点不超过jjj的点的每个二进制位的0/10/10/1个数。但直接存是会爆炸的。考虑到每个数只会被用一次,所以可以考虑主席树那种复用信息的思想来继承长链后代的信息,然后短链直接暴力统计贡献就行。由于ldxldxldx蒟蒻是口胡选手只会暴力写法,因此正解差不多是照...原创 2018-11-03 22:42:26 · 247 阅读 · 0 评论 -
2018.10.27 bzoj1984: 月下“毛景树”(树链剖分)
传送门唉蒟蒻又退化了,这道sb题居然做了20min,最后发现是updcovupdcovupdcov写成了updaddupdaddupdadd我还能说什么233233233就是让你转边权为点权之后,支持树上路径覆盖,单点覆盖,路径加,求路径最大。直接乱码一发居然AAA了?贴代码了(稍微有点长):#include<bits/stdc++.h>#define lc (p<&...原创 2018-10-27 20:59:08 · 202 阅读 · 0 评论 -
2018.10.30 NOIP训练 【模板】树链剖分(换根树剖)
传送门纯粹是为了熟悉板子。然后发现自己手生了足足写了差不多25min而且输出的时候因为没开long longWA了三次还不知所云代码原创 2018-10-31 08:10:40 · 332 阅读 · 0 评论 -
2018.10.06 spoj QTREE3(树链剖分)
传送门发现把树投射到序列上。发现每个黑点都只会对其子树产生影响。再继续想想好像在投射到序列上之后好像就是查询从点uuu到根路径上深度最浅的黑点。也就是logloglog段线段树上最靠左的黑点。这个直接在线段树上二分到叶子结点返回下标就行了。代码:#include<bits/stdc++.h>#define N 100005#define lc (p<<1)...原创 2018-10-06 14:32:16 · 218 阅读 · 0 评论 -
2018.10.12 bzoj4712: 洪水(树链剖分)
传送门树链剖分好题。考虑分开维护重儿子和轻儿子的信息。令f[i]f[i]f[i]表示iii为根子树的最优值,h[i]h[i]h[i]表示iii重儿子的最优值,g[i]g[i]g[i]表示iii所有轻儿子的最优值之和。那么显然有:f[i]=minf[i]=minf[i]=min{h[i]+g[i],val[i]h[i]+g[i],val[i]h[i]+g[i],val[i]}然后发现这个...原创 2018-10-12 23:17:21 · 232 阅读 · 0 评论 -
2018.09.26 bzoj4326: NOIP2015 运输计划(二分+树上差分)
传送门简单树上操作。先转边权为点权。显然所有的询问操作对应的路径会有一些交点,那么我们可以直接二分答案,对于所有大于二分值的询问用树上差分维护,最后dfs一遍每个点被覆盖了几次,当前情况合法当且仅当被覆盖次数与大于二分值的询问数相同且点权值可以使跟二分值相比差最大的询问合法。代码:#include<bits/stdc++.h>#define N 300005using n...原创 2018-09-26 08:13:04 · 177 阅读 · 0 评论 -
bzoj5518: [Zjoi2019]语言(树剖+扫描线)
传送门这题完全可以考虑暴力艹标算。不过还是stO O(nlogn)stO\ O(n\log n)stO O(nlogn)的标算。假设当前处理的路径是(u,v)(u,v)(u,v),对应的点的编号为(a1,a2,...,ak)(a_1,a_2,...,a_k)(a1,a2,...,ak),那么可以想成把k2k^2k2个小矩形(ai,aj)(a_i,a_j)(ai,...原创 2019-08-06 14:17:39 · 210 阅读 · 0 评论