
LCA
文章平均质量分 58
notmuch
这个作者很懒,什么都没留下…
展开
-
蓝桥杯系列 - 2018国赛 -版本分支
非常明显的 LCA 问题,可以用倍增算法来解决。一些前期铺垫:我们记节点v到根的深度为depth(v)。那么如果节点w是节点u和节点v的最近公共祖先的话,让u往上走(depth(u)-depth(w))步,让v往上走(depth(v)-depth(w))步,都将走到节点w。因此,我们首先让u和v中较深的一个往上走|depth(u)-depth(v)|步,再一起一步步往上走,直到走到同一个节点,就可以在O(depth(u)+depth(v))的时间内求出LCA。分析刚才的算法,两个节点到达同一节点后,原创 2021-05-07 15:22:17 · 311 阅读 · 0 评论 -
POJ1330,Nearest Common Ancestors(LCA+RMQ/倍增/Tarjan)
LCA的裸题。LCA可以用三种方式求解,其中离线算法有Tarjan,在线算法有倍增,RMQ,个人觉得RMQ效率会高一点。有个博客讲解的很好,链接:https://blog.youkuaiyun.com/my_sunshine26/article/details/72717112这里我总结了一下三种方法的关键点:1.Tarjan求LCA核心:离线+DFS后序遍历+并查集1.开设vis[i], fa[...原创 2019-08-25 14:36:52 · 179 阅读 · 0 评论 -
POJ1986,Distance Queries(LCA)
这道题可以用LCA做出来,虽然最短路可以做出来,但是询问次数很多,每询问一次就求一次最短路的话,时间开销是很大的。这里我是用LCA转化为RMQ求出来,需要注意的一点就是题所给的图可能不是连通的,所以在DFS的时候要稍作改变。#include<cstdio>#include<algorithm>#include<cstring>#include<a...原创 2019-08-25 17:55:38 · 150 阅读 · 0 评论 -
洛谷P2420 让我们异或吧(LCA+倍增)
题意已经很清晰了,接下来直接分析思路吧。这道题可以用LCA解决,只要找到u,v两点的LCA,它们之间的路径也就随之确定。在做这道题之前,我们需要明确,异或运算与加减法一样,同样满足结合律和交换律的,也就是说,x1^ x2^ x3^ x4= (x1^ x2)^ (x3^ x4)=(x1^ x4)^ (x3^ x2)(如果不确定可以写一写几个实例检验一下)。 所以,我们可以考虑将u->v(v-...原创 2019-08-30 10:00:26 · 337 阅读 · 0 评论 -
洛谷P1967 货车运输(倍增+LCA+生成树)
题意:有n座城市,m条道路,每条路有个限流w,有q次询问,询问x,y城市之间的一次性允许通过的最大流量是多少。题意不难理解,看起来也不难,可以用倍增+LCA解决,但是此题有个难点:x,y城市之间可能有多条道路,非但如此,题意给的图可能会有环。我们知道,要用LCA算法前提是图不能有环,如果只是有多条路而无环,我们还可对m条路排一次序,剔除掉那些多余的路径,这样就可以用LCA,但如果有环的话就行不通...原创 2019-08-30 12:36:11 · 191 阅读 · 0 评论 -
POJ3728,The merchant(倍增LCA+分治)
题意:有n个城市,有n-1条边使各个城市相互直接或间接连通,给出一件货物在各城市的价格w[n],然后给出q个询问,每个询问有两个城市s,t,问从s到t的路径上买入卖出货物盈利的最大值。注意:在某个城市买入,只能够在其后经过的城市卖出。分析:假设询问从城市u到城市v的路径上所能获得的最大盈利值,又设lca为u,v的LCA,则u->v的路径就是u->lca->v,那么最大的盈利值就...原创 2019-09-06 19:04:12 · 215 阅读 · 0 评论