POJ 1330 Nearest Common Ancestors题意:最近公共祖先的裸题思路:LCA和ST我们已经很熟悉了,但是这里的f[i][j]却有相似却又不同的含义。f[i][j]表示i节点的第2j个父亲是多少 这个代码不是我的,转自 邝斌博客 1 /* **************...
分类:
编程语言 时间:
2015-09-22 23:36:42
阅读次数:
267
最近公共祖先问题(LCA)是求一颗树上的某两点距离他们最近的公共祖先节点,由于树的特性,树上两点之间路径是唯一的,所以对于很多处理关于树的路径问题的时候为了得知树两点的间的路径,LCA是几乎最有效的解法。首先是LCA的倍增算法。算法主体是依靠首先对整个树的预处理DFS,用来预处理出每个点的直接父节点...
分类:
其他好文 时间:
2015-09-21 19:37:31
阅读次数:
156
1.贪心,递推,基础DP(背包,区间DP,状态压缩DP(去年出了不少于2道铜牌题,看着办))2.搜索(BFS,DFS,A*,IDA*)3.单调队列、单调栈的思想,倍增算法(ST表) (重点左边3个东西在DP优化上的应用,简单讲一下平行四边形法则、斜率优化)4.线段树,树状数组5.树(包括并查集,生成...
分类:
编程语言 时间:
2015-09-10 00:29:17
阅读次数:
312
学习了后缀数组,顺便把DC3算法也看了一下,传说中可以O(n)复杂度求出文本串的height,先比较一下倍增算法和DC3算法好辣。 DC3 倍增法时间复杂度 O(n)(但是常数很大) O(nlogn)(常数较小)空间复杂度 O(n) O(n)...
分类:
编程语言 时间:
2015-09-09 21:00:29
阅读次数:
520
又是一个赤裸裸的模板,倍增思想其实是关键,我们只有稍加改动,也可以得出另外一种运算,快速乘,但实用性不如快速幂,大概只有在大整数乘法时才会用到而倍增思想并不是仅仅用于快速运算,倍增求lca也是常用的倍增算法#include #include #include #include #include #i...
分类:
其他好文 时间:
2015-08-28 23:04:38
阅读次数:
264
题意:给一个树图,每个点的点权(比如颜色编号),m个询问,每个询问是一个区间[a,b],图中两点之间唯一路径上有多少个不同点权(即多少种颜色)。n 2 #define pii pair 3 #define INF 0x3f3f3f3f 4 #define LL long long 5 usi...
分类:
编程语言 时间:
2015-08-27 18:01:07
阅读次数:
2266
学了一发LCA的倍增算法+跳表维护。先说说LCA倍增算法,思路是fa[i][j]求的是i结点的2^j倍的祖先,其中2^0就是父结点了。所以可以递推fa[i][j]=fa[fa[i][j-1]][j-1]。当求LCA时,设深度u>v,则先倍增把u提到v的同等深度,若u==v,lca就是u,否则,两点同...
【分析】
倍增算法 or 线段树。
笔者使用倍增算法。
扩充倍增算法,记录pre[K][N],mn[K][N],mx[K][N],l_r[K][N],r_l[K][N],分别保存对应节点,最小值,最大值,从左到右的答案,从右到左的答案。
首先奠定基础,pre[0][i]=max(i+1,n),mn[0][i]=min(value[i],value[pre[0][i]]),mx同理,l_r[...
分类:
其他好文 时间:
2015-05-02 19:31:57
阅读次数:
171
简述求LCA的倍增算法 对于树上的所有节点,我们可以很轻松地通过dfs求出其直接的父亲节点以及其深度 通过类似RMQ的原理我们可以处理出每个节点的第2^i个父亲 //这个过程既可以在dfs之后双重循环建也可以像树剖模板里那样dfs里直接建 //个人比较推荐后者,会少掉一些不必要的运算,但由于...
分类:
编程语言 时间:
2015-04-15 12:55:45
阅读次数:
148
学习资料:IOI2009国家集训队论文——《后缀数组》
论文里面写的比较清晰了,但是代码里面没有解释,又从网上找到了一份代码的注释,解释的挺好的
地址:http://www.cnblogs.com/Lyush/p/3233573.html
这里是代码模板:
倍增算法实现的,效率很高。
const int maxn = 10010;
int wa[maxn], wb[maxn],...
分类:
编程语言 时间:
2015-01-22 13:23:37
阅读次数:
271