2016-04-30 算法图论 树链剖分小结 一句话,通过一种略微有些贪心思想的hash方法,把树上节点散列到一段连续区间上。通过某个节点的SCC(为该节点后代节点个数 + 1)值来确定他父亲的大胖儿子,连续的大胖儿子在散列区间上是连续的,在处理连续大胖儿子的维护上,我们可以用其他数据结构例如BIT或者ST或者SegTree这种工具来加速... 阅读全文...
2016-04-30 算法图论 tarjan求强连通分量 利用dfs顺序来确定各个点之间的关系 正文 我们有一个栈,还有一个low数组和一个dfn数组,其中low数组记录从该节点出发所能到达的dfs序最小的节点的编号(这个点一定会是他的祖先,之后说明原因),dfn数组记录的是该节点的dfs序 在一个联通块上,选取一点开始dfs,记录df... 阅读全文...
2016-04-30 数据结构树 并查集 一句话,并查集本质上是一个森林,最基本的查询是询问某个节点所在树的树根是什么。显然的,树根相同的节点在同一集合之中。 简单的并查集实现起来非常简单,查询只要不断的找爸爸找到树根就可以了,两个集合求并只要将一个集合的树根接到另一个集合任意一个节点上就可以了(通常直接接在另一个集合的树根上)... 阅读全文...
2016-04-30 算法计算几何 简单凸包求法 首先,求极角需要注意,为了方便,当atan2值小于0时,atan2值加上2π作为极角大小,这样做对于下面的做法来说是比较方便的 1234567inline double atan3(double a,double b ){ double t=atan2(a,b); ... 阅读全文...
2016-04-30 算法图论 tarjan求割点和桥 求割点满足以下任意之一的条件的点u即为割点: u为树根,且u有多余一个的儿子 存在边(u, v),v为u的儿子,且dfn(u) <= low(v) 求桥边(u, v),v为u的儿子, 且dfn(u) < low(v)... 阅读全文...
2016-04-30 算法哈希 BKDR-hash 123456789101112unsigned int BKDRHash(char *str){ unsigned int seed = 131; // 31 131 1313 13131 131313 etc.. unsigned int hash = 0; wh... 阅读全文...
2016-04-30 算法其他 非确定性算法 虽然在OI中并不实用,但是这种算法本身具有非常大的实用价值。事实上,一些非确定性算法在现实中的应用比对应的确定性算法要广泛的多。下面介绍两种非确定性算法。 1. Miller Rabbin Primality TestMR素性测试是一个常用的非确定性素数检查算法,在OI中也有一定的应用,它... 阅读全文...