
模板
Floraqiu
有志者事竟成,破釜沉舟,百二秦关终属楚。
苦心人天不负,卧薪尝胆,三千越甲可吞吴。
展开
-
【KMP算法】 【模板】讲解 + 例题 POJ 3461 Oulipo 【求串s1在串s2中出现了多少次,可以交错重复】
摘自 KMP算法(1):如何理解KMP朴素字符串匹配算法 O(n*m)/* 字符串下标始于0 */int NaiveStringSearch(string S, string P){ int i = 0; //S的下标 int j = 0; //P的下标 int s_len = S.size(); int p_len = P.s...转载 2018-04-21 11:37:19 · 485 阅读 · 0 评论 -
【树状数组】【模板】讲解
【树状数组】【模板】讲解原创 2018-08-14 20:25:19 · 232 阅读 · 0 评论 -
【最短路】【Floyd算法】【模板】 讲解 + 例题 HDU 1874 畅通工程续 【求两点间最短路】
【最短路】【Floyd算法】【模板】讲解 + 例题 HDU 1874 畅通工程续Floyd算法讲解适用情况:多源多汇最短路(即求任意两点间的最短路)复杂度: O(v^3)思想: DP 通过枚举中间点来优化它的时间复杂度 d[i][j][k]表示从i到j在节点只允许经过[0,k]时的最短距离a. 如果最短路经过k点,则d[i][j][ k ] = d[i][k][k-...原创 2018-08-07 16:19:34 · 2002 阅读 · 1 评论 -
【最短路】【Dijkstra算法】【模板】讲解 + 例题1 HDU 2544 最短路 + 例题2 HDU - 1224 Free DIY Tour 【旅游飞行,使有趣值最大(无边权,有点权)】
【最短路】【Dijkstra算法】【模板】讲解 + 例题 HDU 2544 最短路 Dijkstra算法讲解适用情况: 单源多汇最短路(边权为正)复杂度: O(E+ VlogV) 【堆优化后】思想: 贪心D(s, t) = {Vs … Vi … Vj … Vt}表示s到t的最短路,其中i和j是这条路径上的两个中间结点,那么D(i, j)必定是i到j的最短路,这个性质是显...原创 2018-08-07 17:48:16 · 689 阅读 · 0 评论 -
【单调栈】
单调栈总结摘自单调栈1 摘自单调栈21、定义单调栈是一种特殊的栈,其栈内的元素都保持一个单调性(单调递增或者递减)。 单调递增栈,从栈底到栈顶依次递增(单调非递减栈:允许有相等)单调递减栈,从栈底到栈顶依次递减(单调非递增栈:允许有相等)假设下图是一个栈内元素的排列情况(单调递增的栈): 2、作用利用单调栈,可以找到从左(或者右)遍历第一个比它小(或者大)...原创 2018-08-22 17:17:40 · 1349 阅读 · 1 评论 -
【最短路】【spfa算法】
bool SPFA(int s){ queue<int> Q; memset(inq, 0, sizeof(inq)); memset(cnt, 0, sizeof(cnt)); memset(d, INF, sizeof(d)); d[s] = 0; inq[s] = true; Q.push(s); while(!...原创 2018-08-23 21:56:35 · 283 阅读 · 0 评论 -
【无向图 联通分量】
强连通分量 12无向图 双联通分量 12 例题 关于tarjan算法,一直有一个很大的争议,就是low[u]=min(low[u],dfn[v]); 这句话,如果改成low[u]=min(low[u],low[v])就会wa掉,但是在求强连通分量时却没有问题 根据许多大佬的观点,我想提出自己的一点看法,在求强连通分量时,如果v已经在栈中,那么说明u,...原创 2018-08-24 18:47:56 · 585 阅读 · 0 评论 -
【AC自动机】
模板 以HDU 2222为例#include <bits/stdc++.h>using namespace std;const int Max_Tot = 5e5 + 5;struct Aho{ struct state { int next[26]; int fail, cnt; } table[Max_Tot...原创 2018-09-06 17:11:20 · 239 阅读 · 0 评论 -
【回文树】
以HYSBZ 3676 回文串 为例#include <bits/stdc++.h>using namespace std;typedef long long LL;const int maxn = 3e5+5;const int sgsz = 26;//回文树struct Pam{ int nxt[maxn][sgsz], S[maxn];...原创 2018-09-06 21:27:08 · 291 阅读 · 0 评论 -
【二分图】
模板1 模板2 讲解判断是否为二分图(染色法)#include <iostream>#include <stdio.h>#include <string.h>#include <algorithm>#include <math.h>原创 2018-08-21 15:53:08 · 255 阅读 · 0 评论 -
【线段树】【模板】讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值)
【线段树】【模板】讲解 + 例题1 HDU - 1754 I Hate It (点修改分数)+ 例题二 POJ - 3468 A Simple Problem with Integers(区间加值)讲解1、线段树的构成线段树是一种二叉搜索树,它从上至下逐步将一个大区间划分成一些更小的单元区间,每个区间对应线段树中的一个节点树中的每个节点代表着一段区间[L,R],每个节...原创 2018-08-14 19:47:07 · 451 阅读 · 0 评论 -
【带删除】【带权】【并查集】【模板】 UVA 11987 Almost Union-Find 【对一些集合进行合并,删除某元素,输出某元素所在集合元素个数和总和】
【带删除】【带权】【并查集】 UVA 11987 Almost Union-Find 【对一些集合进行合并,删除某元素,输出某元素所在集合元素个数和总和】 例题:UVA 11987 Almost Union-Find I hope you know the beautiful Union-Find structure. In this problem, you’r...原创 2018-08-06 21:44:13 · 498 阅读 · 0 评论 -
【最小生成树】【prim算法(适用于稠密图)】【模板】讲解 + 例题 POJ 2349 Arctic Network【有s个卫星可通信,为使所有城市连通,求最小的最长的边】
算法过程随机选取一个点作为初始集合,并保存所有点到这个集合的最短距离。每次找到离当前集合最近的节点加入这个集合,并更新所有未加入集合的点到这个集合的最短距离。重复操作直到无新节点可加,连通整个图。该算法和求最短路的dijkstra算法非常像//伪代码设起始点为s清除所有点的标记设dis[s] = 0,其他dis[i] = s到i的距离循环n次{ 在所有未标...原创 2018-08-06 19:53:09 · 2033 阅读 · 0 评论 -
【递推】【规律总结】直线、折线、曲线分割平面、平面分割空间问题
【递推】【规律总结】直线、折线、曲线分割平面、平面分割空间问题原创 2018-07-26 16:36:03 · 1216 阅读 · 0 评论 -
【递推】HDU1207汉诺塔II 【汉诺塔及汉诺塔变形 归纳】
汉诺塔问题设f(n)为移动n层的汉诺塔的解,则整个过程其实分为三步:把n-1层移到第二个上面去(花费f(n-1))把最大的移到第三个柱子上面去(花费1)把n-1层移动到第三个柱子上去(花费f(n-1)) 故有f(n)=2*f(n-1)+1 其中f(1)=1 即f(n) = 2^n - 1【递推】HDU1207;汉诺塔II 【汉诺塔及汉诺塔变形 归纳】经典的汉诺塔问...原创 2018-07-28 13:22:45 · 508 阅读 · 0 评论 -
【Trie 字典树】【模板】 讲解 + 例题 HDU - 1251 - 统计难题 【统计以字符串s为前缀的单词个数】
【Trie 字典树】【模板】 讲解 + 例题 HDU - 1251 - 统计难题 【统计以字符串s为前缀的单词个数】Trie 字典树讲解1、Trie的基本操作插入过程(insert) 对于一个单词,从根开始,沿着单词的各个字母所对应的树中的节点分支向下走,直到单词遍历完,将最后的节点进行标记,表示该单词已插入Trie树。查询过程 (query) 同样...原创 2018-08-09 15:12:01 · 835 阅读 · 0 评论 -
【字符串 hash】【模板】讲解+例一:HDU1711 Number Sequence 【求串b在串a中首次出现的位置】+例二 :POJ1200 Crazy Search【求串a中长度为n的唯一子串】
【字符串 hash】【模板】讲解 + 例题一:HDU1711 Number Sequence 【求串b在串a中首次出现的位置】+ 例题二 :POJ1200 Crazy Search【求串a中长度为n的唯一子串】字符串 hash 讲解1、Hash是什么Hash就是一个像函数一样的东西,你放进去一个值,它给你输出来一个值。输出的值就是Hash值。一般Hash值会比原来的值更好储存...原创 2018-08-09 15:56:50 · 728 阅读 · 0 评论 -
【STL】【bitset 二进制】【总结】使用biset进行二进制操作
【STL】【bitset 二进制】【总结】使用biset进行二进制操作 1、简介bitset是用来进行一些状态储存的操作。类似于一个标记数组,又类似于状压里面的二进制。它与状压的共同点是都可以直接进行一些二进制操作。而且好用的是它类似于动态数组,可以开很多位,方便对每一位进行操作。需要调用bitset库。位数左边是高位,右边是低位。从0开始。可以直接访问为b[0]2、初始...原创 2018-08-09 18:02:58 · 1327 阅读 · 0 评论 -
并查集总结【模板】 例题:①简单POJ - 1611 The Suspects ②一般HDU - 1272 小希的迷宫
这篇博客讲的非常清晰,墙裂推荐->Algorithm带权并查集 并查集并查集的本质是一个森林,每棵树代表一个集合,树根为集合的代表元。支持两种操作:查询一个元素所处的集合 【find】合并两个集合 【merge】查询一个元素所处的集合,只需要不断寻找父节点,直到找到代表元。 合并两个集合时,先找到两个集合的代表元x、y,然后令fa[x]=y即可。优化原创 2018-02-01 10:25:55 · 298 阅读 · 0 评论 -
【扩展KMP】【模板】讲解
【扩展KMP】【模板】讲解 摘自 拓展kmp算法总结1、扩展KMP是什么?解决何种问题?与KMP算法的异同?拓展kmp是对KMP算法的扩展,它解决如下问题:定义母串S,和字串T,设S的长度为n,T的长度为m,求T与S的每一个后缀的最长公共前缀,也就是说,设extend数组,extend[i]表示T与S[i,n-1]的最长公共前缀,要求出所有extend[i](0<=...转载 2018-08-10 10:39:51 · 2186 阅读 · 1 评论 -
【最小生成树】【Kruskal算法(含并查集的使用)(适用于稀疏图)】【模板】讲解 + 例题1 POJ 2485 Highways + 例题2 POJ - 1287 Networking
Kruskal算法每次选取权重最小的边,如果这条边是安全的,那么就把它加入到生成树中,直到选取n-1条表是算法结束(若找不到,则说明不存在最小生成树MST)。所谓安全边,指的是这条边连接的两个结点,原本是处于不同的树上的。(否则就形成了回路)很显然,Kruscal算法中用到了并查集,判断某一条边是否连接了两棵不同的树。模板代码: (并查集部分省略) 重载符号的使用见博客st原创 2018-02-01 16:29:22 · 474 阅读 · 0 评论 -
【KMP算法】【最小循环节】讲解 + 例题 POJ 1961 Period 【给字符串s,求s的具有循环节的前缀,并输出所有前缀长,循环节个数】
【KMP算法】【最小循环节】讲解 + 例题 POJ 1961 Period 【给字符串s,求s的具有循环节的前缀,并输出所有前缀长,循环节个数】摘自 KMP最小循环节一、定理假设S的长度为len,若S存在最小循环节,循环节的长度c_L = len-next[len],子串为S[0…len-next[len]-1]。 c_l表示cycle_len。(1)如果len %...转载 2018-08-10 15:52:31 · 1641 阅读 · 0 评论 -
数论总结
数论1.1 Lucas定理 (扩展Lucas定理)【组合数取模】Lucas定理:要计算Cnm%pC_n^m \%pCnm%p的值n=nkpk+nk−1pk−1+...+n1p+n0n = n_kp^k+n_{k-1}p^{k-1}+...+n_1p+n_0n=nkpk+nk−1pk−1+...+n1p+n0m=mkpk+mk−1pk−1+...+m1p+m0m = m_...原创 2019-01-26 20:12:55 · 388 阅读 · 0 评论