摘要:
推荐技术公众号:不爱睡觉的大猪 本来想详细写写LCA和RMQ的东西的,但是觉得积累得还不够而且比较懒就不写了。鉴于都是超经典问题,网上和大量书籍都是很好的学习材料,所以就不想说了 这里只简单说说原理,说说代码实现上面的一些细节和注意问题,并且给出模板 下面写提供几个学习LCA和RMQ的博客,都很通熟 阅读全文
摘要:
LCA模板题题意:给一个无根树,有q个询问,每个询问两个点,问两点的距离。求出 lca = LCA(X,Y) , 然后 dir[x] + dir[y] - 2 * dir[lca]dir[u]表示点u到树根的距离下面两份代码都可以通过HDU的C++和G++,都不存在爆栈问题,网上很多人说会爆栈,加了申请系统栈语句,其实不用,而且好想比赛中不允许使用的Tarjan算法跑得更快些,C++ 15ms, G++ 50ms 左右, RMQ大概60ms在线算法:LCA转化为RMQ#include <iostream>#include <cstdio>#include <cst 阅读全文
摘要:
LCA题意:给一个无根树,有q个询问,每个询问3个点,问将这3个点连起来,距离最短是多少,LCA的模板题,分别求LCA(X,Y),LCA(X,Z),LCA(Y,Z),和对应的距离,然后3个距离相加再除以2就是这个询问的结果对于一对点,x,y, lca = LCA(x,y) , 那么点x到点y的距离为 dir[x] + dir[y] - 2 * dir[lca] ; 其中dir[u] 表示点u到树根的距离由于是模板题,只给代码,详细的讲解可以在学习笔记里面找《LCA与RMQ》在线算法:LCA转RMQ#include <iostream>#include <cstdio># 阅读全文