重链剖分
Cyhlnj
这个作者很懒,什么都没留下…
展开
-
Bzoj2588 Count on a tree
离散化 主席树 每个点记录它到根的路径上的点 查询时u,v,lca,fa[lca]组合起来计算即可# include <bits/stdc++.h># define IL inline# define RG register# define Fill(a, b) memset(a, b, sizeof(a))using namespace std;typedef long long l原创 2017-12-23 11:22:39 · 244 阅读 · 0 评论 -
Luogu3242:[HNOI2015]接水果
题面Luogu3242Sol考虑每个盘子怎样才能接到一个水果 分两种情况: 盘子的x,yx,yx, y在一条链上,那么水果的两点就要在这条链之外 不在的话,水果的两点就分别在盘子的两点的子树中 记录下每个点的dfsdfsdfs序,和这棵子树结束的dfsdfsdfs序 发现上述讨论就是相当于求水果这个点(x,y)(x,y)(x, y)包含它的二维矩阵(盘子)有多少个...原创 2018-02-06 18:43:38 · 384 阅读 · 0 评论 -
Luogu4175:[CTSC2008]网络管理Network
题面Luogu4175:[CTSC2008]网络管理NetworkSol路径第k" role="presentation" style="position: relative;">kkk大 无解直接判断就好了 然后整体二分,加上树链剖分+树状数组统计# include # define RG register# define IL inline# define Fil原创 2018-02-06 18:34:22 · 333 阅读 · 0 评论 -
Bzoj4817:[SDOI2017]树点涂色
题面BzojSol做个转化 最开始都是虚边 操作111就是LCTLCTLCT里的AccessAccessAccess操作 求的就是路径上虚边的个数+1然后就好办了 用树链剖分+线段树来维护每个点到根虚边的个数的最大值 操作111:AccessAccessAccess时虚实边的转换,要把原来连的点的SplaySplaySplay的最左边的点在原树中的子树所有点+1,再把...原创 2018-02-10 10:35:18 · 251 阅读 · 0 评论 -
Luogu3676: 小清新数据结构题
题面传送门题解先来一发很显然的暴力维护两个数组,一个是子树的val和,一个是子树的val和的平方和 暴力更新,暴力查询就可以获得10分吐槽一波luogu的部分分# include # define RG register# define IL inline# define Fill(a, b) memset(a, b, sizeof(a))# define S原创 2018-01-18 21:23:58 · 298 阅读 · 0 评论 -
Bzoj3631: [JLOI2014]松鼠的新家
树剖后在dfn上差分# include # define RG register# define IL inline# define Fill(a, b) memset(a, b, sizeof(a))using namespace std;typedef long long ll;const int _(3e5 + 10);IL ll Read(){ RG ll x原创 2018-01-15 21:17:07 · 190 阅读 · 0 评论 -
[HNOI2015]开店
如果没有年龄区间 画图发现ans=∑ni=1disi+n∗disu−2∗∑ni=1dislca(i,u)\sum_{i=1}^n dis_i + n * dis_u - 2 * \sum_{i=1}^{n} dis_{lca(i, u)}对∑ni=1dislca(i,u)\sum_{i=1}^{n} dis_{lca(i, u)}用树链剖分,对于每个点,都向上走到根,记录每条路经过次数,询问原创 2018-01-06 08:21:09 · 309 阅读 · 0 评论 -
Bzoj1969: [Ahoi2005]LANE 航线规划
题面戳我Sol把询问反过来,变成加边,先加上边变成一棵树,之后每次加边就相当于去掉这两个点与这条边形成的环的代价,用树剖+线段树覆盖区间即可# include # define RG register# define IL inline# define Fill(a, b) memset(a, b, sizeof(a))using namespace std;ty原创 2018-01-15 08:10:55 · 276 阅读 · 0 评论 -
Bzoj3626 [LNOI2014]LCA
先把问题简化,怎样求一个点x和y的lca的deep和 显然直接求LCA,但是这样的话,要求多个就不好叠加 于是可以用奇技淫巧:先把x到根的所有点打上标记,那么询问y到根的标记的个数即为答案,这样就可以叠加 所以对于询问,拆成[1,l-1], [1, r],排序后依次加点覆盖标记即可可以用树链剖分+线段树,或者Orz yyb大佬一样写LCT代码表示不想写LCT# include <bits/st原创 2017-12-31 20:26:06 · 232 阅读 · 0 评论 -
[TJOI2015]旅游
树链剖分+线段树 线段树维护max,min,左往右的最大差,右往左的最大差 求LCA时一定要注意方向# include <bits/stdc++.h># define RG register# define IL inline# define Fill(a, b) memset(a, b, sizeof(a))using namespace std;typedef long long原创 2017-12-30 17:47:27 · 224 阅读 · 0 评论 -
Bzoj4568: [Scoi2016]幸运数字
题面传送门Sol裸的线性基 当然是选择log3log3log^3的ststst表+树剖辣# include <bits/stdc++.h># define RG register# define IL inline# define Fill(a, b) memset(a, b, sizeof(a))using namespace std;typede...原创 2018-03-16 22:13:29 · 227 阅读 · 0 评论