
LCA
文章平均质量分 79
China__int128
你没有落后, 亦没有领先。
展开
-
树链剖分的总结
什么是树剖?here. 以下是它的一些基本概念: 关于树剖,最基本的就是求取 LCA,而他的时间复杂度到达了 O(logn)O(logn)O(logn),虽说并比不上离线的 Tarjan 算法,只不过后者常数巨大,因此树剖便成为了不二之选。 首先理解一下树剖的过程: 我们假设一棵树它是长这样的。 不难发现,重链就是 1,4,9,12,13,141,4,9,12,13,141,4,9,12,13,14. 树链剖分求 LCA 的思想就是把一个图剖分成 lognlognlogn 条链,然后在链上进行跳跃。 综原创 2022-05-02 21:01:16 · 863 阅读 · 1 评论 -
关于LCA的补充
结合之前的 LCA blog. 我们又发现如果使用 tarjan 算法,时间复杂度为 O(nq)O(nq)O(nq),如果询问次数 qqq 较大,再结合一些小小的常熟,可能会 TLE。 于是我们有了新的思路——欧拉序结合 RMQ。 什么是欧拉序? 还是这张图 该图的欧拉序即为: abacdcecaabacdcecaabacdceca 然后我们可以发现,如果求 bbb 与 eee 的 LCA 就是欧拉序中 bbb 至 eee 中层数最小的所对应的字母,而区间最小用什么,当然是 RMQ 啊! 所以我们只需要跑原创 2022-04-04 23:01:58 · 459 阅读 · 0 评论 -
LCA总结
What is “LCA”? LCA 是最近公共祖先,可以发现它是唯一的。 举个例子,bbb 与 eee 的最近公共祖先是 aaa,因为 aaa 既是 bbb 的祖先又是 eee 祖先,并且它是最近的。 学习 LCA 关键在于它的思想,而不是做几道模板! How to write it? 首先是最简单的朴素算法,也就是通过一次 dfs 预处理出一个 fafafa 数组,和 并查集 十分相似。 然后求取 LCA 时: 假设求取 xxx 和 yyy 的 LCA,首先用一个 flagflagflag 数组标记原创 2022-04-03 17:16:30 · 740 阅读 · 0 评论