Description 现有一棵树。您需要写一个树上倍增算法,以实现如下操作: A x 新建一个节点,将它作为x节点的儿子,编号为当前节点总数+1。 Q k p1 p2 p3.... 查询p1,p2,p3...这些节点的LCA。其中k表示查询节点的个数。 最初树上只有一个节点,编号为1。 多个节点的 ...
分类:
其他好文 时间:
2018-04-09 11:09:26
阅读次数:
288
LCA 算法是一个技巧性很强的算法。 十分感谢月老提供的模板。 这里我实现LCA是通过倍增,其实就是二进制优化。 任何一个数都可以有2的阶数实现 例如16可以由1 2 4 8组合得到 5可以由1 2 4 组合得到 便于读者理解 我放一道例题吧 Problem F: 挑战迷宫 Description ...
分类:
编程语言 时间:
2018-03-16 13:35:59
阅读次数:
300
文章来源:https://www.cnblogs.com/FuTaimeng/p/5655616.html 倍增算法可以在线求树上两个点的LCA,时间复杂度为nlogn 预处理:通过dfs遍历,记录每个节点到根节点的距离dist[u],深度d[u] init()求出树上每个节点u的2^i祖先p[u] ...
分类:
其他好文 时间:
2018-02-21 11:40:02
阅读次数:
128
有错请大力指出【鞠躬】第一次写正经博客非常慌张 ——百度百科 LCA的四种算法: 记录dfs序转化为rmq问题 tarjan算法 倍增算法 树链剖分 一、记录dfs序转化为rmq问题 1.dfs序是什么? 其实本人对dfs序的定义也不怎么清晰……望告知orz 首先我们需要一颗树……比如说它长这样: ...
分类:
编程语言 时间:
2018-02-12 20:15:01
阅读次数:
162
一、LCA的定义: 在一棵树上,点u到点v之间的路径最短的那个节点就是lca(u,v) 二、倍增思想: 我们定义fa[i][j]表示节点i往上跳跃2^j次所到达的节点标号,则有结论: 1.因为2^(j-1)+2^(j-1)=2^,所以fa[i][j]=f[i][j-1]*2; 2.dep[i]表示节 ...
分类:
编程语言 时间:
2017-12-31 23:31:16
阅读次数:
204
题目链接:http://poj.org/problem?id=1679 题意: 给你一个图,问你这个图的最小生成树是否唯一。 题解: 求这个图的最小生成树和次小生成树。如果相等,则说明不唯一。 次小生成树(倍增算法): maxn[k][i]:表示从节点i向上走2^k步,这一段中边权的最大值。 枚举每 ...
分类:
其他好文 时间:
2017-12-20 13:38:22
阅读次数:
181
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4566 题解: 后缀数组,单调栈。把两个串A,B拼接起来,中间用没出现过的字符隔开。然后用倍增算法求出 sa[] rank[] height[]接着用单调栈维护出两个数组 L[],R[],意义如... ...
分类:
其他好文 时间:
2017-12-09 19:32:35
阅读次数:
185
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4516 题解: 把串反过来后,问题变为求每个后缀的互不相同的子串个数。首先用倍增算法求出 sa[],rank[],height[],然后对 height[]数组建立 ST表。接着求出整个串的子串... ...
分类:
其他好文 时间:
2017-12-07 00:19:24
阅读次数:
166
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4278 题解: 把两个串连接起来,用一个大数连接(必须要用大数)。倍增算法求出后缀排名。然后两个指针指向A,B串,每次比较两个后缀的大小,优先取出小的那个后缀的首字母,然后对应指针向后移动一位。... ...
分类:
其他好文 时间:
2017-12-06 20:06:16
阅读次数:
144
后缀数组资料参考 ==> 链接1 、 链接2 、 论文《后缀数组——处理字符串的有力工具》 、 Height数组与H数组讲解 DA(倍增算法) 时间复杂度是 O(nlogn),然后空间复杂度是 O(n) const int N = 100005; int wa[N],wb[N],wv[N],ws[N ...
分类:
编程语言 时间:
2017-11-16 22:07:24
阅读次数:
215