随笔分类 -  数据结构--树链剖分

摘要:题面 "传送门" Sol 裸的线性基 当然是选择$log^3$的$st$表+树剖辣 cpp include define RG register define IL inline define Fill(a, b) memset(a, b, sizeof(a)) using namespace st 阅读全文
posted @ 2018-03-16 22:14 Cyhlnj 阅读(189) 评论(0) 推荐(0)
摘要:题面 "Bzoj" Sol 做个转化 最开始都是虚边 操作$1$就是$LCT$里的$Access$操作 求的就是路径上虚边的个数+1 然后就好办了 用树链剖分+线段树来维护每个点到根虚边的个数的最大值 操作$1$:$Access$时虚实边的转换,要把原来连的点的$Splay$的最左边的点在原树中的子 阅读全文
posted @ 2018-02-10 10:35 Cyhlnj 阅读(197) 评论(0) 推荐(0)
摘要:题面 "Luogu3242" Sol 考虑每个盘子怎样才能接到一个水果 分两种情况: 盘子的$x, y$在一条链上,那么水果的两点就要在这条链之外 不在的话,水果的两点就分别在盘子的两点的子树中 记录下每个点的$dfs$序,和这棵子树结束的$dfs$序 发现上述讨论就是相当于求水果这个点$(x, y 阅读全文
posted @ 2018-02-06 18:43 Cyhlnj 阅读(197) 评论(0) 推荐(0)
摘要:题面 "Luogu4175:[CTSC2008]网络管理Network" Sol 路径第$k$大 无解直接判断就好了 然后整体二分,加上树链剖分+树状数组统计 cpp include define RG register define IL inline define Fill(a, b) mems 阅读全文
posted @ 2018-02-06 18:34 Cyhlnj 阅读(167) 评论(0) 推荐(0)
摘要:题面 "传送门" 题解 先来一发很显然的暴力 维护两个数组,一个是子树的val和,一个是子树的val和的平方和 暴力更新,暴力查询就可以获得10分~~吐槽一波luogu的部分分~~ cpp include define RG register define IL inline define Fill 阅读全文
posted @ 2018-01-18 21:22 Cyhlnj 阅读(245) 评论(0) 推荐(0)
摘要:树剖后在dfn上差分 cpp include define RG register define IL inline define Fill(a, b) memset(a, b, sizeof(a)) using namespace std; typedef long long ll; const 阅读全文
posted @ 2018-01-15 21:17 Cyhlnj 阅读(130) 评论(0) 推荐(0)
摘要:题面 "戳我" Sol 把询问反过来,变成加边,先加上边变成一棵树,之后每次加边就相当于去掉这两个点与这条边形成的环的代价,用树剖+线段树覆盖区间即可 cpp include define RG register define IL inline define Fill(a, b) memset(a 阅读全文
posted @ 2018-01-15 08:11 Cyhlnj 阅读(170) 评论(0) 推荐(0)
摘要:如果没有年龄区间 画图发现ans=$\sum_{i=1}^n dis_i + n dis_u 2 \sum_{i=1}^{n} dis_{lca(i, u)}$ 对$\sum_{i=1}^{n} dis_{lca(i, u)}$用树链剖分,对于每个点,都向上走到根,记录每条路经过次数,询问时从u向上 阅读全文
posted @ 2018-01-06 08:53 Cyhlnj 阅读(173) 评论(0) 推荐(0)
摘要:先把问题简化,怎样求一个点x和y的lca的deep和 显然直接求LCA,但是这样的话,要求多个就不好叠加 于是可以用奇技淫巧:先把x到根的所有点打上标记,那么询问y到根的标记的个数即为答案,这样就可以叠加 所以对于询问,拆成[1,l-1], [1, r],排序后依次加点覆盖标记即可 可以用树链剖分+ 阅读全文
posted @ 2017-12-31 20:26 Cyhlnj 阅读(175) 评论(0) 推荐(0)
摘要:树链剖分+线段树 线段树维护max,min,左往右的最大差,右往左的最大差 求LCA时一定要注意方向 # include <bits/stdc++.h> # define RG register # define IL inline # define Fill(a, b) memset(a, b, 阅读全文
posted @ 2017-12-30 17:47 Cyhlnj 阅读(252) 评论(0) 推荐(0)
摘要:离散化 主席树 每个点记录它到根的路径上的点 查询时u,v,lca,fa[lca]组合起来计算即可 # include <bits/stdc++.h> # define IL inline # define RG register # define Fill(a, b) memset(a, b, s 阅读全文
posted @ 2017-12-23 11:22 Cyhlnj 阅读(188) 评论(0) 推荐(0)