算法-LCA
Maxwei_wzj
AFO
展开
-
【POJ1330】Nearest Common Ancestors-LCA算法
【POJ1330】Nearest Common Ancestors-LCA算法原创 2016-08-04 13:59:31 · 358 阅读 · 0 评论 -
【SPOJ10707】Count on a tree II-树上莫队算法
测试地址:Count on a tree II 题目大意:有一棵树,每个点有一个点权,多个询问,每次询问一条路径上有多少个不同的点权。 做法:本题需要用到树上莫队算法。 我们知道这题如果出在序列上就是莫队算法的裸题,而这题就是树上莫队算法的裸题。 我们知道要使用莫队算法,必须要将一条路径化为一个区间。从这个意义上来说,树上莫队算法的思想和树链剖分类似,都是将一棵树化为一个序列,但是树链剖分...原创 2018-02-24 10:54:59 · 331 阅读 · 0 评论 -
【BZOJ3991】寻宝游戏(SDOI2015)-贪心+DFS序+set
测试地址:寻宝游戏 做法:本题需要用到DFS+set。 首先需要看出,无论从哪个点出发结果都相同。然后就是要找一种能得到最优解的走法,显然走每条边222次是最优的,那怎么样构造出走法呢?其实只要按照这些点的DFS序顺序走下去,最后走回第一个点即可。因为对于涉及到的每条边,只下去一次再上来一次,所以这个肯定最优。那么我们每次插入或删除一个点时,实际上只影响到它在DFS序中相邻的两个点之间的贡献,...原创 2018-03-16 20:49:07 · 257 阅读 · 0 评论 -
【BZOJ4568】幸运数字(SCOI2016)-树上倍增+异或线性基合并
测试地址:幸运数字 做法:本题需要用到树上倍增+异或线性基合并。 我们发现,每次询问都是求从一条路径上选一个子集,使得这个子集的异或和最大。如果只有一个询问,那敢开这题的大家肯定都会O(60n)O(60n)O(60n)的线性基+贪心做法,问题是有qqq个询问,暴力做显然会炸,所以需要找到优化的方法。 我们发现只要求出了对应向量空间的线性基,那么求最大异或和就是O(60)O(60)O(60)的...原创 2018-03-22 22:18:30 · 369 阅读 · 0 评论 -
【BZOJ2815】灾难(ZJOI2012)-拓扑排序+建树+LCA
测试地址:灾难 做法:本题需要用到拓扑排序+建树+LCA。 首先看到要处理DAG上的问题,自然而然地想到用拓扑排序处理出图的层次(这里的图是指从被吃的生物指向吃的生物的图)。我们发现题目要求的是,将某一个点删去后,有多少个点因此不能从最高层(即图中入度为0的点)走到,这个问题非常难考虑,如果我们能找到一个点,使得这个点被切断相当于这个点的所有食物全部灭绝,那么这样连起来就是一棵树,就可以通过求...原创 2018-03-19 20:52:11 · 294 阅读 · 0 评论 -
【BZOJ4817】树点涂色(SDOI2017)-LCT+LCA+线段树
测试地址:树点涂色 做法:本题需要用到LCT+LCA+线段树。 首先对于第一个操作,我们发现这个很像LCT中的access操作,那么因为每次涂的颜色不同,我们可以断定同种颜色的点一定是LCT中的一条重链,这样路径上不同的颜色段数就等于路径上轻边的数量+1+1+1。 于是我们可以维护f(i)f(i)f(i),表示该点到根路径上的不同颜色段数。那么: 对于第二个操作,答案显然为f(u)+f(v...原创 2018-04-13 09:05:48 · 226 阅读 · 0 评论 -
【BZOJ2125】最短路-圆方树+倍增LCA
测试地址:最短路 做法:本题需要用到圆方树来处理仙人掌。 题目中所给的图称作仙人掌图,即每条边至多在一个环上的图。对于这种图,我们一般把它转化成树后,将树上的某些算法修改后来解决仙人掌上的问题。常用的一种转化方式就是圆方树。 在圆方树中,一个圆点表示原仙人掌中就有的点,而一个方点表示一个点双连通分量(环),并且一个方点和它表示的环中所有的点连边。那么我们怎么样构造出圆方树呢?在求点双连通分量...原创 2018-04-20 11:57:21 · 393 阅读 · 1 评论 -
【BZOJ4539】树(HNOI2016)-主席树+LCA
测试地址:树 做法:本题需要用到主席树+LCA。 要求两点间的距离,显然要维护每个点的深度,以及要求两个点的LCA。 我们把一开始的树看成一块,然后每次操作,都是在某一块下面挂一个新的块,每个块都是模板树的一棵子树。这样我们可以先把块缩成点,那么缩块后整棵大树就变成了一棵更小的树。考虑求一个点的深度,这个深度等于它到它所在块的根的距离,加上块根到整棵树根节点的距离,显然前面的部分可以直接在模...原创 2018-05-29 15:49:11 · 276 阅读 · 0 评论 -
【BZOJ3123】森林(SDOI2013)-树上主席树+启发式合并
测试地址:森林 做法:本题需要用到树上主席树+启发式合并。 如果树的形态固定,那么求路径第kkk大,我们想到用主席树。求区间的第kkk大我们是在序列上建主席树,每棵线段树代表一个前缀和,那么求路径的第kkk大,类比序列的前缀和与树上前缀和的转化,我们可以在树上建主席树,每棵线段树代表从一个点到根路径上的信息,这样我们就可以通过x+y−lca(x,y)−fa(lca(x,y))x+y−lca(x...原创 2018-05-30 17:11:07 · 257 阅读 · 0 评论 -
【CF856D】Masha and Cactus-树形DP+LCA+树状数组
测试地址:Masha and Cactus题目大意: 给定一棵树,再给定mmm条边,每条边有权值,从里面选出一些边加入树中,使得形成的图是仙人掌,即每个点至多处在一个环中的图,并使得加入的边的权值和最大,求出这个最大值。做法: 本题需要用到树形DP+LCA+树状数组。首先转化一下问题。不难想到,添加一条边会使得树上的一条路径上的点被一个环覆盖,那么要使一个点至多在一个环中,也就是要求添加的边...原创 2018-12-01 17:54:19 · 498 阅读 · 0 评论 -
【BZOJ2286】消耗战(SDOI2011)-虚树+树形DP
测试地址:消耗战 做法:本题需要用到虚树+树形DP。 这题如果只有一个询问,相信大家都会做了,比较裸的树形DP。但是询问次数很大,每次询问都O(n)O(n)O(n)DP的话,总的时间复杂度就是O(nm)O(nm)O(nm),无法承受。但是我们发现,总共涉及的询问点数不大,那么我们迫切需要一个关于kkk而不是关于nnn的算法。这时候就要拿出大杀器——虚树了。 虚树其实应该不算是一种数据结构,它...原创 2018-03-07 11:27:35 · 273 阅读 · 0 评论 -
【BJOI2010】次小生成树-最小生成树+倍增LCA
【BJOI2010】次小生成树-最小生成树+倍增LCA原创 2017-09-10 13:40:36 · 353 阅读 · 0 评论 -
【ZOJ3195】Design the City-LCA算法
【ZOJ3195】Design the City-LCA算法原创 2016-08-05 00:37:41 · 504 阅读 · 0 评论 -
【HDU2586】How far away?-LCA算法模板题
【HDU2586】How far away?-LCA算法模板题原创 2016-08-01 23:58:32 · 375 阅读 · 0 评论 -
【HDU2874】Connections between cities-LCA算法
【HDU2874】Connections between cities-LCA算法原创 2016-08-02 00:07:09 · 316 阅读 · 0 评论 -
【POJ1986】Distance Queries-LCA算法
【POJ1986】Distance Queries-LCA算法原创 2016-08-03 10:08:20 · 336 阅读 · 0 评论 -
【Vijos-P1935】不可思议的清晨-树上倍增+LCA+分类讨论
【Vijos-P1935】不可思议的清晨-树上倍增+LCA+分类讨论原创 2016-11-08 21:20:28 · 462 阅读 · 0 评论 -
【POJ3417】Network-LCA算法+树上差分
【POJ3417】Network-LCA算法+树上差分原创 2016-08-06 19:07:34 · 1144 阅读 · 0 评论 -
【NOIP2013提高组T3】货车运输-最大生成树+倍增LCA
【NOIP2013提高组T3】货车运输-最大生成树+倍增LCA原创 2016-08-03 10:38:17 · 395 阅读 · 0 评论 -
【NOIP2016提高组T2】天天爱跑步-倍增LCA+树上差分
【NOIP2016提高组T2】天天爱跑步-倍增LCA+树上差分原创 2017-03-21 13:43:35 · 2084 阅读 · 0 评论 -
【NOI2003T4】逃学的小孩-贪心+树形DP求直径+倍增LCA
【NOI2003T4】逃学的小孩-贪心+树形DP求直径+倍增LCA原创 2017-03-26 18:15:39 · 724 阅读 · 0 评论