#include #include #include #define LL long long #define ULL unsigned long long using namespace std; const int MAXN=100010; //以下为倍增算法求后缀数组 int wa[MAXN]... ...
分类:
编程语言 时间:
2017-01-15 16:53:59
阅读次数:
283
给出一棵n个点的树(以1号点为根),定义dep[i]为点i到根路径上点的个数。众所周知,树上最近公共祖先问题可以用倍增算法解决。现在我们需要算出这个算法精确的复杂度。我们定义计算点i和点j最近公共组先的精确复杂度为bit[dep[i]-dep[lca(i,j)]]+bit[dep[j]-dep[lc ...
分类:
其他好文 时间:
2016-10-14 00:00:18
阅读次数:
421
【转载】:http://www.cnblogs.com/OUSUO/p/3805715.html?utm_source=tuicool&utm_medium=referral 1. DFS预处理出所有节点的深度和父节点 inline void dfs(int u) { int i; for(i=he ...
分类:
编程语言 时间:
2016-08-21 13:59:19
阅读次数:
360
转自:http://www.cppblog.com/superKiki/archive/2010/05/15/115421.html 一、后缀数组的实现 本节主要介绍后缀数组的两种实现方法:倍增算法(Doubling Algorithm)和DC3算法(Difference Cover),并对两种算法 ...
分类:
编程语言 时间:
2016-08-12 21:28:10
阅读次数:
257
后缀数组 DA(倍增)算法求 SA[N] 与 Rank[N] (时间O(NlogN),空间O(N)) sa[i] : 表示 排在第i位的后缀 起始下标 rank[i] : 表示后缀 suffix(i)排在第几 height[i] : 表示 sa[i-1] 与 sa[i] 的LCP 值 h[i]: 表 ...
分类:
编程语言 时间:
2016-08-07 23:04:50
阅读次数:
208
倍增算法可以在线求树上两个点的LCA,时间复杂度为nlogn 预处理:通过dfs遍历,记录每个节点到根节点的距离dist[u],深度d[u] init()求出树上每个节点u的2^i祖先p[u][i] 求最近公共祖先,根据两个节点的的深度,如不同,向上调整深度大的节点,使得两个节点在同一层上,如果正好 ...
分类:
编程语言 时间:
2016-07-09 13:31:49
阅读次数:
171
/*---------------倍增算法+RMQ后缀数组模板--------------输入:从0开始的字符串g,长度len最大为10^6输出: sa[]表示:n 个后缀从小到大进行排序之后把排好序的后缀的开头位置顺 次放入 sa 中,sa[i]表示排第i位的字符串开头是sa[i],因为添加了一个...
分类:
编程语言 时间:
2016-01-02 00:55:59
阅读次数:
254
题意:一个n个点的数, m个人住在其中的某些点上, 每个人的标号1-m, 询问u-v 路径上标号前a个人,并输出标号,a using namespace std;const int maxn = 1e5 + 5;const int maxdep = 20;int par[maxdep][maxn],...
分类:
编程语言 时间:
2015-10-21 00:01:32
阅读次数:
231
2015北京网络赛 Couple Trees题意:两棵树,求不同树上两个节点的最近公共祖先思路:比赛时看过的队伍不是很多,没有仔细想。今天补题才发现有个 倍增算法,自己竟然不知道。 解法来自 qscqesze,这个其实之前如果了解过倍增的话还是不是很难,不过这题的数据也不是很给力,极限数据理论上.....
分类:
编程语言 时间:
2015-09-23 06:35:54
阅读次数:
225