算法小记
这是最近学习或复习的算法们的汇聚。
Facico
生命是闪耀的此刻,不是过程,就像芳香不需要道路一样。
展开
-
SPFA优化总结
简介SPFA一个很快很短适合稀疏图的单元最短路的算法。 但是有时用优化,在稠密图中跑的很快。优化优化1:SLF如果当前要入队一个点i,如果d[i] < dhead就放入队首,否则就放入队尾。这个本来要用一个双端队列来实现的,但是要一个超级好实现的方法,但是比较水,但是实测很快,加进来一个tail后,如果d[data[head+1]]>data[tail],那么swap(data[head+1],d原创 2016-11-14 22:02:03 · 2710 阅读 · 2 评论 -
第k短路的求法
Description从一个点s到t的第k短的路径。Solution我以前只会打从一个点到另一个点的最短路径。 后来去看了看k短路径的求法。A_Star算法设估价函数g[i]=f[i]+p[i]g[i]=f[i]+p[i],f[i]f[i]表示i到t的最短路径的长度,p[i]p[i]表示s到i目前走得距离。 首先,我们把原图的边全部反向连边。然后求出所有的点到t的最短路径。 然后,我们把s丢进原创 2016-11-03 17:22:11 · 2107 阅读 · 0 评论 -
四边形不等式优化DP学习小记
简介有一种DP可以写成四边形不等式,那么可以用一个优化来优化这种DP(一般是二维的,不加优化是O(n3)O(n^3))。四边形不等式如果a≤b≤c≤da≤b≤c≤d,那么如果DP式子满足f(a,c)+f(b,d)≤f(b,c)+f(a,d)f(a,c)+f(b,d)≤f(b,c)+f(a,d),那么这就是一个四边形不等式。先看个例题题意N堆石子摆成一条线。现要将石子有次序地合并成一堆。规定每次只能选原创 2016-10-23 08:40:24 · 1173 阅读 · 0 评论 -
后缀自动机学习小记
简介后缀三姐妹:后缀数组,后缀自动机,后缀树。 后缀自动机:Suffix Automation,也叫SAM。 创立算法的思路来源:能不能构出一个自动机(本质就是一个有向图),能识别一个串的所有后缀。识别所有后缀基础想法把所有的后缀都放进一个trie里面,比如串aabbabd。 这样的状态太多了,怎么把状态数缩小。减小状态数的方法定义一个子串的right集合为这个子串在原串中出现的右端点集合原创 2016-08-18 22:11:24 · 5230 阅读 · 4 评论 -
线性求逆元
简介逆元,简单的来说就是a∗b≡1(modp)a*b≡1(mod p),那么b就是a关于p的逆元。 正常的来说用扩展欧几里得来做。复杂度不是线性的。 但是如果所有的i≤p,有一个线性求逆元的方法。 正常的来说方法因为i≤pi≤p,所以考虑用i来表示p,并要求表示出来的所有数都能用p和i表示。 设p=ki+b,k=⌊pi⌋,l=pmodip=ki+b,k=\lfloor{p\over i}\r原创 2016-08-15 21:37:10 · 1617 阅读 · 0 评论 -
BSGS算法学习小记(大步小步算法)
简介原创 2016-08-04 22:12:15 · 4485 阅读 · 0 评论 -
扩展KMP复习小记
简介KMP大家都耳熟能详,扩展KMP只是一个扩展版而已,字面意思啦! 我记得以前打过这个复习小记的,但是不知为何失踪了。KMP与扩展KMP的对比KMP的next[i]表示从1到i的字符串s,前缀和后缀的最长重叠长度。 EXKMP的next[i]表示从1到i的字符串s,和从i到n的字符串st的最长重叠长度。 也就是说KMP是向前的匹配,EXKMP是向后匹配。 扩展KMP问题是KMP问题的补充和原创 2016-07-29 23:35:57 · 1788 阅读 · 0 评论 -
Cipolla算法学习小记
简介Cipolla算法是解决二次剩余强有力的工具,一个脑洞大开的算法。 认真看懂了,其实是一个很简单的算法,不过会感觉得出这个算法的数学家十分的机智。基础数论储备二次剩余首先来看一个式子x2≡n(modp)x^2≡n(\mod p),我们现在给出n,要求求得x的值。如果可以求得,n为mod p的二次剩余,其实就是n在mod p意义下开的尽方。Cipolla就是一个用来求得上式的x的一个算法。勒让德原创 2016-07-26 14:30:43 · 4244 阅读 · 2 评论 -
带修改的莫队算法学习小记
简介莫涛大神创造出的离线询问算法的带修改版。 算法基础:需要掌握莫队算法,会打暴搜(暴力)。 一个叫莫的双端队列。 只支持单点修改操作方法普通的不带修改的莫队算法要把每个询问带上两个关键字排序,现在待修改的莫队算法要带上三个关键字排序。初始操作fo(i,1,m) { scanf("%s%d%d",s,&k,&l); if (s[0]=='Q')a[++tot].原创 2016-07-10 09:15:21 · 5711 阅读 · 4 评论 -
Link Cut Tree学习小记
简介Link Cut Tree简称LCT,是维护动态树方式的一种,是一个可以对树进行添加链或子树,删除链或子树等等,可以支持对树的结构进行修改的算法。与树链剖分的区别树链剖分只能维护静态树,就是只能对树上的点的值进行修改的算法,一般还是用线段树来维护的。 所以LCT就厉害了,首先是维护方式不同,其次它是用splay来维护的。树链剖分可以干的,LCT都可以干,但LCT可以干的,树链剖分有些并不能干。原创 2016-07-03 21:01:44 · 2402 阅读 · 0 评论 -
splay复习小记
简介splay的原名是伸展树,一种超级实用的数据结构,能快速地干很多数据结构不能干的事情。 很久以前就听说过并且略微地学了一些,但是当时了解地并不是很多。 有些人把splay达成spaly叫做死吧你,(⊙﹏⊙)b结构实质上他是一个二叉搜索树,就是每个节点的左儿子在原序列中是在自己左边的,右儿子在原序列中是在自己右边的,构图的方式有很多。 每一个节点都可以存储一些值,表示它的子树中的信息(比如说原创 2016-06-28 20:32:01 · 3733 阅读 · 0 评论 -
树状数组复习小计
简介其实我以前以为树状数组是一个很没用的东西,今天一看才发现可以干很多事情。 树状数组详细是什么我就不说了,网上还有很多资料。大致就是,每个点x的父边连向的点都是x+lowbit(x)。lowbit(x)=-x and x,就是把x末尾的1变成0并向上推一位,比如lowbit(100)=1000,lowbit(10101)=10110,lowbit(11000)=100000。 (只能看看手打图原创 2016-06-26 16:39:06 · 1556 阅读 · 0 评论 -
字符串hash的用处
简介hash(哈希)。 把字符串用一种特定的方式放到一个数组里面。用处我目前学的短,只知道两个用处。1、字符串判重相信很多人都会。2、可以快速判断同一个字符串中的两段字符串是否相等maxx=10007;...fo(len,1,n)h[len]=h[len-1]*maxx+s[len];//c++可以不用打hash这个十分的爽,因为能自动的弹出一个数(可正可负)fo(len,1,n)g[i原创 2016-04-28 19:58:42 · 5231 阅读 · 0 评论 -
【快速因数分解】Pollard's Rho 算法
算法目的给一个数n,快速提取n的一个因数。算法根据:生日悖论讲生日悖论之前,先看一个东西。 给出[1..1000]的数,从中任意选出一个数为k的概率是110001\over 1000。 但是假如选出两个数p,q要求他们的差值为k,就是|p-q|=k的概率大概是15001\over 500,因为要去绝对值。 继续向下,选出l个数,使他们之间有两个数的差值为k,那么概率会随l的变大而变大,最终会趋原创 2016-04-21 12:47:12 · 13155 阅读 · 5 评论 -
计划
不断更新中计划打的博客计划刷的题目做题计划学或复习的算法学复习目标……原创 2016-03-30 12:40:25 · 1381 阅读 · 0 评论 -
以后应该注意的东西
收集各种比赛是应该注意的东西。不断更新中……细节1、在要运用取模操作的题目,取模操作要打少一点,mod的好慢啊! 2、有把握的题不要先打对拍,否则可能时间不够。 3、博弈最好还是用dfs来求解 4、long long取模的还是用黑科技1 5、思路1、对于一道二分不能做又想二分的题目,想想优先级(就是排序) 2、题目只给了一个式子的题目就把式子化简或展开,把它分解成能做的 3、对于n/i这原创 2016-03-16 14:36:49 · 1068 阅读 · 0 评论 -
解决自然数幂和的方法
题意∑i=1nimmodp\sum_{i=1}^{n}{i^m}\mod p暴力呵呵,快速幂高斯消元从k次,推到k+1次,求系数矩阵乘法还不会,有点难搞倍增像快速幂一样,打一个f[i][j]差分表(n+1)k+1−nk+1=C1k+1∗nk+……+Ckk+1∗n+1(n+1)^{k+1}-n^{k+1}=C_{k+1}^1*n^k+……+C_{k原创 2016-03-08 12:51:17 · 7809 阅读 · 0 评论 -
后缀数组复习小记
后缀数组复习小记【Suffix Array】 后缀数组,顾名思义就是处理后缀的数组。例如daabbc的后缀:daabbc,aabbc,abbc,bbc,bc,c六个后缀。 ——>定义sa[i]为排名第i个的后缀的第一个字符在原字符串中的序号。如上面的sa[1]=2,因为后缀从序号2开始的aabbc排第一个。 ——>定义rank[i]为序号从i开始的后缀排第几个。如上面的ran原创 2016-02-03 18:42:17 · 874 阅读 · 0 评论 -
树链剖分学习小记
树链剖分学习小记 平常在一棵树上,从点u到点v询问一些最大值,求和之类的,都是先打个lca然后在类暴力一下,小题可以对,但遇到大题就挂了。然后就去看了一下树链剖分%%% 其实也不难。。。 树链剖分其实就是用数据结构去维护上面的点或链,降低一下复杂度。不过如果随意的去维护,会搞得很乱,时间消耗可能比暴搜还慢。 现在有一种剖分的方法:轻重链剖分(启发式剖分)。 从原创 2016-02-04 10:32:28 · 1234 阅读 · 0 评论 -
最大权闭合子图
以前打过的,但是忘了,在GDKOI没想出来。 有一个有向图,点权可以为正也可以为负。选一个点集,如果点中所有的点连接的边都出现在这个点集中,那就中闭合图。如果点权和最大就是最大权闭合子图。建图s连向正权,负权连向t(绝对值),然后中间正常连边(如果i依赖j,那么就是i连向j)。求解在图中求一遍最小割,然后用正权和减去最小割就是最大权闭合图。证明网络流一般都很难证明,我们感性的证一下。 如果u依赖原创 2016-02-26 12:34:56 · 1871 阅读 · 0 评论 -
回文树学习小记
回文树(回文自动机)学习小记(Palindromic Tree)回文树,顾名思义,用回文串构成的一棵树,结合了一点AC自动机的思想,打起来不长,用起来挺方便。变量 首先满足AC自动机的结构。 定义集合tree: fail (指向该节点表示的回文串最长回文后缀在树中的节点,如abbba就是ababbabbba的最长回文后缀)。 son[26] (原创 2016-02-05 17:01:17 · 836 阅读 · 0 评论 -
上下界网络流学习小计
概述 有上下界的网络流。建图 网络流有了建图,其他都是浮云。设立超级源和超级汇原创 2016-02-18 22:00:51 · 1061 阅读 · 0 评论 -
zkw复习小计
zkw是一个求最小费用最大流的一种又短又快的算法,很多情况下,虐暴spfa。 不过不能有负费用或0。 zkw运用了gap的分层思想,不过他是用费用分层的。 设一个d[i]表示i到t的最短距离,bz[i]表示现在第i个点得标记(标记id时刻++),now[i]的当前弧(sap时代替first,然后时刻更新,很显然)。 不过有一个问题,d[i]既然是i到t的距离,但是后面的点还没有搜过,如何知道原创 2016-02-26 20:24:35 · 1265 阅读 · 4 评论 -
拉格朗日插值法复习小计
拉格朗日插值法概述因为n次方的函数图像可以有n+1个点确定(比如说y=kx+b就只用两个点确定,y=ax2+bx+cax^2+bx+c,只用三个点就可以确定),所以个n次方的方程给你n+1个x或者y就能确定这个方程。拉格朗日插值法就可以把这n+1个对应的值插进一个方程,然后给一个x,可以求出y。比如y=3x+2,给你(x=1,y=5;x=4,y=14)那么随意询问一个x,用拉格朗日插值法就可以求出对原创 2016-02-26 20:40:26 · 5254 阅读 · 2 评论 -
第一类斯特林数学习小记
概念问题来源p个不同人围k个相同圆桌而坐,要求各桌非空,其不同方案数为第一类Stirling数S(p,k)S(p,k) 。问题解决S(p,p)=1(p≥0),S(p,0)=0(p≥1)S(p,p)=1(p≥0),S(p,0)=0(p≥1) 分类讨论。 一类,人1独围一圆桌:S(p-1,k-1)S(p-1,k-1); 二类 ,人1不独围一圆桌:先安排人2,人3,…, 人p,再把人1安排在人2原创 2016-03-13 11:48:33 · 5541 阅读 · 5 评论