算法竞赛模板
__Lingyue__
微软亚洲研究院 实习生
展开
-
并查集 模板
并查集是高效的查询两个元素是否属于一个集合的方法,为了使用方便把关系并查集和并查集利用面向对象和泛型编程的思想写在了一起。template <typename Type>class DisjointSet { struct node { int parent_; Type relation_; //parent -> this ...原创 2016-10-20 00:09:33 · 346 阅读 · 1 评论 -
uva10129 欧拉回路 判断出入度数 连通性 遍历压栈
欧拉回路:求度数>>连通性>>遍历找回路原创 2016-08-05 00:57:08 · 636 阅读 · 0 评论 -
uva10304 Ordering-Tasks 拓扑排序
拓扑排序的邻接表和矩阵实现利用二维数组稀疏表很浪费空间,利用邻接表更好。利用邻接表要堤防重复值。例如:1,3 1,3 二维数组把一个结点赋1,但是邻接表在一个节点下会出现两个值。设置visited数组之后一般不用担心邻接表重复值影响结果。原创 2016-08-05 00:50:58 · 483 阅读 · 0 评论 -
AC自动机 多模式串匹配 模板
AC自动机就是字典树+KMP,解决了一个串在字典树中的匹配问题。原创 2016-10-18 01:51:28 · 431 阅读 · 0 评论 -
Manacher 模板 最长回文串
note:1. 通过添加特殊字符同时解决奇数偶数问题。2. 通过已知结果进行优化。原创 2016-10-04 13:55:38 · 328 阅读 · 0 评论 -
KMP 扩展KMP
1. kmp解决了求所有主串的前缀pre[i] (0 <= i < n)的后缀与模式串前缀的最大匹配长度问题2. 拓展kmp解决了所有主串的后缀suf[i]的前缀,与模式串前缀的最大匹配长度问题.3. 当且仅当len%(len-next[len])==0时,str[next[len]~len-1]为最小循环节原创 2016-08-04 21:40:10 · 428 阅读 · 0 评论 -
Trie树 字典树 模板
字典树是保存字典的非常好的手段。原创 2016-10-17 00:11:08 · 441 阅读 · 0 评论 -
双连通分量 模板
1. bcc的全称是biconnected component,双连通分量,点双连通关注的是不包含割点的连通分量,边双连通关注的是不包含桥的连通分量。2. 点双连通例题:UVALive 5135。边双连通例题:poj 3352。3. 边双连通分量巧妙利用isB数组,空间换时间,也大大降低了模板的复杂度,解决了标记边难的问题。原创 2016-11-05 23:58:40 · 763 阅读 · 0 评论 -
NTT FFT 数论变换 快速傅里叶变换 模板
关于傅里叶变换和数论变换原创 2016-09-29 12:34:42 · 1489 阅读 · 0 评论 -
无向连通图 割点 桥 模板
1. 先通过tarjan标记一遍dfn和low数组,再计数。2. 可以任选一个节点为根,如果是一个环,那么dfs可以直接判断出来是一个根节点。如果根节点有大于一个的子树,说明这个节点是割点。3. 割点要 >=, 桥>。4. 要注意题目有没有重边,如果有,计算桥的时候要特殊标记。5. 割点的数目不等于可以分割部分的数目,后者要用强连通分量来计算。6. 求桥时无需判断是否是根节点。原创 2016-10-27 12:13:25 · 426 阅读 · 0 评论 -
有向图强连通分量 模板
强连通分量是指两两互相可达的一个分量。利用dfn而不是low的原因是还在栈中的元素low并没有计算完,而且没有计算low的必要,在割点后的已经被计算,在割点前的low值也不由这个节点来决定。原创 2016-10-26 11:20:16 · 528 阅读 · 0 评论 -
复数
复数的结构体模板原创 2016-09-26 11:25:15 · 503 阅读 · 0 评论 -
堆 优先队列 堆排序
利用堆手动实现的优先队列和堆排序原创 2016-12-12 22:55:01 · 324 阅读 · 0 评论 -
poj 3253 Huffman树(最优二叉树)
Problem: 有一个足够长的木板,给定n个需求得木块儿,切n-1刀可以切成这n个木块儿,每一刀的代价是当前所切木板的长度,求最小代价。原创 2016-12-22 20:06:37 · 828 阅读 · 0 评论 -
dijkstra 模板
dijkstra解决无负权边的图的最短路,有向无向都可以。原创 2016-10-21 11:56:56 · 399 阅读 · 0 评论 -
高精度取余
关于 a%b = c….r,b如果是负数,等同于正数。如果a是负数,等同于正数,但r为负。原创 2016-08-31 21:04:53 · 2346 阅读 · 0 评论 -
矩阵运算 快速幂
矩阵乘法必须满足第一个矩阵的列等于第二个矩阵的行。结果矩阵的行是第一个矩阵的行,列是第二个矩阵的列。矩阵乘法行列各元素相乘。矩阵快速幂利用幂的二分优化。利用运算符重载进行一系列更方便的操作。// 整数快速幂取模template <typename Type>long long ipow(Type x, Type n, Type mod){ long lo...原创 2016-08-04 22:34:56 · 1227 阅读 · 0 评论 -
欧拉函数 最大素因数 素数判断 素数表
1. 求欧拉函数(小于n的数中与n互质的数的数目)2. 求最大素因数3. 打素数表4. 判断一个数是否是素数5. 在一些题目中,需要先提前暴力出最大值,否则会超时。原创 2016-08-04 22:10:37 · 2959 阅读 · 0 评论 -
最小生成树 模板
密集图用prim算法,O(v^2),稀疏图用Kruskal算法,复杂度O(ElogE)。原创 2016-10-24 00:47:57 · 475 阅读 · 0 评论 -
算法竞赛 基本模板
常用到的基本模板原创 2016-04-16 17:25:43 · 5825 阅读 · 2 评论 -
树状数组 模板
可以快速求区间和等问题,查询更新复杂度都是lgn, 常数比线段树低。原创 2017-10-18 21:16:52 · 419 阅读 · 0 评论 -
矩形覆盖求并 二维离散化 扫描线算法
Problem: 给了n个矩形的左下角坐标和右上角坐标,求这n个矩形的面积和,覆盖部分只计算一次。 2017广西南宁acm区域赛:https://nanti.jisuanke.com/t/17313 Solution: 利用扫描线算法进行离散化,然后再求和。原创 2017-10-08 17:45:40 · 891 阅读 · 0 评论 -
扩展欧几里得 模板
1. 扩展欧几里得模板。2. 求解两个元是整数的方程可以转换为取余消元枚举其中一个数。3. 复杂度和gcd一样是lgn。4. gcd(a,b)//a,b可以是任意整数,但是为了保证结果是正的,所以让a,b取绝对值. 显然gcd(a,b) == gcd(|a|,|b|).原创 2016-08-04 22:12:26 · 1285 阅读 · 2 评论 -
二分查找 上下界 插入位置
1. 二分查找分递归和递推版本。2. 可以用来求上下界。3. 若找到,则返回下标,若没有找到,则返回-1。4. 二分查找的核心在于查找,并且数组有线性大小关系。原创 2016-08-04 22:42:49 · 512 阅读 · 0 评论 -
dinic 网络流模板
1. dinic的复杂度为n^2*m,n是点,m是边。2. 要注意指定起点和终点,先分层,然后进行dfs。原创 2017-03-09 17:40:02 · 640 阅读 · 0 评论 -
最小费用最大流 模板
1. 因为含有负权边,所以使用spfa进行增广。2. 指定流量的最小费用流可以初始化一个f,然后每次一直循环到f<= 0为止。3. 函数返回的是最大流,当然经过少量修改可以返回最小费用,利用最小流量乘以相应的费用即可。4. prevv记录父节点,preve记录当前节点对应父节点的第几条边。原创 2017-03-29 14:25:45 · 405 阅读 · 0 评论 -
线段树 模板
线段树的模板原创 2016-12-11 17:24:17 · 438 阅读 · 0 评论 -
floyd 最短路 模板
floyd 算法主要解决:有负权边的有向图或者无向图的两两节点之间的最短路。如果存在有G\[i\]\[i\]是负数,那么说明有负权环。原创 2016-10-22 14:01:33 · 424 阅读 · 0 评论 -
RMQ 区间最值 模板
1. RMQ 的全称为Range Max/Min Query。2. 构造dp数组的时间为O(nlogn), 但是查询时间为O(1),所以当数据量小于logn时,用朴素遍历找最值就好,但是请求次数大于logn时,就要用这个模板。3. 利用动态规划的思想。原创 2016-10-11 12:09:41 · 354 阅读 · 0 评论 -
spfa 有无负权环 负权边最短路 模板
spfa 是利用队列优化的快速bellman-ford的算法,可以判断是否有负权环,如果没有的话可以求出来最短路。原创 2016-10-21 15:37:33 · 931 阅读 · 0 评论 -
后缀数组 dc3 模板
线性复杂度后缀数组模板原创 2016-10-10 21:09:28 · 945 阅读 · 0 评论 -
排列组合模板
求排列组合数。原创 2016-08-16 15:04:04 · 1006 阅读 · 0 评论 -
n元一次不定方程 模板
1. 设方程a1x1 + a2x2 + a3x3 + a4x4 = c,所有系数的最大公因数应该整除c。2. 将方程转换为方程组递归求解,a1x1 + a2x2 = d2t2,d2t2 + a3x3 = d3t3,d3t3 + a4x4 = c.3. 逐级替换。原创 2016-08-16 13:32:18 · 2150 阅读 · 0 评论 -
快速排序 求第k大数
1. 快排利用标兵的思想,但每一次都是比较范围大小,没有精确排序。2. 同样适用于快速求解 需要定性的范围问题,例如:第k大(将前后定性大小,但不用排序).3. 求解第k大:通过判断下标,只计算有k的那一半。4. 快排是从广到窄的递归。5. 快排:a.枢轴要回归.b.i总是指向偏大的值.原创 2016-08-04 22:13:36 · 11304 阅读 · 0 评论 -
运算符重载
1. 运算符重载在类内。2. 要使用常量参数。3. 构造函数的常见写法。原创 2016-08-04 21:53:36 · 325 阅读 · 0 评论 -
哈希处理字符串
1. 常用哈希函数,seed=131,初始化阶数组,方便等阶后比较,初始化字符串,比较时只需要看差值。2. 逆向初始化字符串,使当前元素在差值中。原创 2016-08-04 22:38:40 · 702 阅读 · 0 评论 -
n以内的互素表 最大公因数表
n以内的互素表,最大公因数表原创 2016-09-21 17:30:22 · 1226 阅读 · 0 评论 -
catalan 数列
catalan 的模板原创 2016-09-23 17:20:28 · 702 阅读 · 0 评论 -
计算从[1,n]的素数个数
数组大小要大于根号下最大值原创 2016-09-19 18:58:20 · 1473 阅读 · 0 评论 -
最大公约数 最小公倍数
最大公约数,最小公倍数模板原创 2016-08-04 21:38:45 · 8413 阅读 · 0 评论