
OI知识总结
文章平均质量分 53
学习信息竞赛相关知识做的总结
CaptainHarryChen
I solemnly swear that I am up to no good.
展开
-
博弈论——SG定理(函数)
博弈论——SG定理原创 2017-02-07 20:23:52 · 532 阅读 · 0 评论 -
(扩展)Lucas定理——求大组合数取模
Lucas定理若PPP为质数 Crn≡C⌊r/P⌋⌊n/P⌋×Cr mod Pn mod P (mod P)Cnr≡C⌊n/P⌋⌊r/P⌋×Cn mod Pr mod&nbsp原创 2018-03-31 10:21:09 · 324 阅读 · 0 评论 -
多项式的各种操作(逆元,除法,取模,开根,对数,exp,多点求值,插值,牛顿迭代法)
牛顿迭代法给定函数G(x)G(x)G(x) 求多项式F(x)F(x)F(x),使得G(F(x))≡0 (mod&a原创 2018-04-04 10:15:48 · 996 阅读 · 1 评论 -
动态规划(DP)——单调优化
形式形如dp[i]=max(dp[j]+g[j])+w[i] |(j≥f[i])dp[i]=max(dp[j]+g[j])+w[i] |(j≥f[i])dp[i]=max(dp[j]+g[j])+w[i]\space \space | (j\geq f[i]) 的dp方程, (f[x],g[x],w[x]分别为与x有关的不同式子) (需保证f[...原创 2018-05-05 09:34:33 · 522 阅读 · 0 评论 -
OI 复习提纲
数据结构平衡树Splay非旋转Treap动态树可持久化数据结构可持久化线段树可持久化Treap可持久化并查集可持久化Trie与树相关点分治树链剖分字符串AC自动机后缀数组后缀自动机数学高斯消元浮点高斯消元整数高斯消元辗转高斯消元多项式算法FFT(快速傅里叶变换)NTT(快速数论变换)...原创 2018-05-28 20:01:12 · 700 阅读 · 0 评论 -
离散对数(BSGS)及(exBSGS)
问题已知a,b,Pa,b,Pa,b,P,且a与P互质,求解同余方程ax≡b (mod P)ax≡b (mod P)a^x \equiv b \space (mod \space P)算法推导设 m=⌈P−−√ 原创 2018-06-23 19:42:27 · 971 阅读 · 0 评论 -
网络流——平面图最小割
问题对一个平面无向图,求最小割。 通俗理解因为这是平面图,没有边相交,所以它的最小割,一定可以用铅笔画一条线,把图的S,T两点分在两边,使得铅笔线穿过的边权值最小。 于是可以建立把原图分为上下两部分,并建立对偶图,使得对偶图的边权为原图的边权: 于是从S到T的最短路,就是原图的最小割(权值最小的铅笔线)关于如何判断S,T点:连一条原图S->T的边在最外面,有框出来一...原创 2018-07-09 19:40:01 · 1760 阅读 · 0 评论 -
最短路——差分约束系统
问题已知一系列不等式 ⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪Xi1−Xj1≤d1Xi2−Xj3≤d2Xi3−Xj3≤d3...Xik−Xjk≤dk{Xi1−Xj1≤d1Xi2−Xj3≤d2Xi3−Xj3≤d3...Xik−Xjk≤dk\left \{ \begin{array}{c}X_{i_1}-X_{j_1} \leq d_1 \\ X_{i_2}-X_{j_3} \leq d_2 ...原创 2018-07-20 21:24:17 · 208 阅读 · 0 评论 -
最小生成树——单点度数限制
问题求最小生成树,满足结点1的度数不超过k的情况下,使边的权值和最小。思路先去掉结点1,用Kruskal生成一个森林,设其有m个联通块。 如果k<mk<mkO(n)O(n)O(n)找环重复执行以上操作直到结点1度数为k,或者操作无法使得生成树更优。题目POJ1639#include<iostream>#include<string>...原创 2018-07-21 13:01:58 · 1566 阅读 · 0 评论 -
01分数规划
问题已知数组A,数组B,求数组x,x[i]∈{0,1}x[i]∈{0,1}x[i] \in \{0,1\},使得S最小:S=∑x[i]×A[i]∑x[i]×B[i]S=∑x[i]×A[i]∑x[i]×B[i]S=\frac {\sum x[i] \times A[i]} {\sum x[i] \times B[i]} 分析等式变形: S×∑x[i]×B[i]=∑x[i]×A[i]S×...原创 2018-07-21 16:40:45 · 210 阅读 · 0 评论 -
Rabin-Miller素数测试
本文不证正确概率,因为我不会 判断大整数是否为质数前提定理费马小定理:若 nnn为质数,a<na<naan−1≡1 (mod n)an−1≡1 (mod n)a^{n-1}\equiv 1\ (mod\ n);若任意整数xxx满足ax−1≡1 (mod x)ax−1≡1 (mod x)a^{x-...原创 2018-09-04 20:27:40 · 1268 阅读 · 0 评论 -
欧拉定理及扩展(附证明)
若(a,m)=1(a,m)=1(a,m)=1,则满足aφ(m)≡1&amp;amp;nbsp;(mod&amp;amp;nbsp;m)aφ(m)≡1&amp;amp;nbsp;(mod&amp;amp;nbsp;m)a^{\varphi (m)} \equiv 1\ (mod \ m)证明设与m互质的数为b1,b2,b3,...,bφ(m)∵(a,m)=1∴ab1,ab2,ab3,...,abφ(m)都与m互质,且每个数均不原创 2018-09-02 20:27:23 · 4237 阅读 · 3 评论 -
模线性方程组(中国剩余定理+通用解法)
求解 ⎧⎩⎨⎪⎪⎪⎪⎪⎪⎪⎪⎪⎪x≡a1 (mod m1)x≡a2 (mod m2)x≡a3 (mod m3)...x≡an (mod mn){x≡a1 (mod m1)x≡a2 (mod m2)x≡a3 (mod m3)...x≡an (原创 2018-09-03 16:16:17 · 1446 阅读 · 0 评论 -
最小费用流——原始对偶(Primal-Dual)
EK算法的改进版,不知道名字(也许是ZKW??)EK算法EK算法就是不断的用SPFA寻找一条最小费用的增广路径,直到无法增广为止。改进类似于Dinic,先将结点用到汇点T的最短距离标号,每次只走dis[v]==dis[u]+cost[u-&gt;v]的边进行增广,保证了费用最小。在这种情况下,就可以类似Dinic,同时增广多条路径。细节较多,见代码及注释代码#include&lt;...原创 2018-12-25 09:17:59 · 4018 阅读 · 4 评论 -
第一类斯特林数
概念[nk]n \brack k[kn]表示将nnn个数的序列划分为mmm个圆排列的方案数。递推公式[nk]=[n−1k−1]+[n−1k]×(n−1){n \brack k}= {{n-1} \brack {k-1}}+{{n-1}\brack k}\times (n-1)[kn]=[k−1n−1]+[kn−1]×(n−1)[n−1k−1]n-1 \brack k-1[k−1n−...原创 2019-01-12 12:05:12 · 6987 阅读 · 1 评论 -
生成树计数——矩阵树定理(Matrix-Tree)
文章目录结论无向图有向图口胡Matrix-Tree证明前置技能行列式定义初等变换拉普拉斯展开求法柯西-比尼定理(Cauchy-Binet)Matrix-Tree定理证明基尔霍夫矩阵性质基尔霍夫矩阵行列式为0不连通的图的主余子式行列式为0树的主余子式为1关联矩阵证明主体证毕结论无向图对于无向图GGG,设第iii个点的度数为did_idi,第iii个点与第jjj个点相连的边数为aija_{ij...原创 2019-01-18 20:00:50 · 4747 阅读 · 1 评论 -
Min_25筛
简介求积性函数前缀和,线性筛需要把函数的每一位值都算出来,作了许多不必要的操作。线性筛中,通过计算最小质因子幂的函数值,与之前已计算出的函数值相乘,得到新的函数值。如果我们能批量执行上面的操作,即用最小质因子幂的函数值,与另一些函数值的和相乘,就可以得到更多的函数值的和。我们还能发现,当我们要求前n项的和时,大于根号n的质因子都不能用于计算任何其它的积性...原创 2019-03-07 11:36:19 · 3828 阅读 · 3 评论 -
动态树(LCT)错误总结
汇总犯过的一大堆神奇错误。访问儿子结点时,没有pushDown(),左右儿子未翻转。例:Node *findRoot(Node *u){ Access(u); Splay(u); //这里漏掉一句:u->pushDown(); while(u->ch[0]!=null) { u=u->ch[0]; ...原创 2018-03-25 10:38:19 · 307 阅读 · 0 评论 -
快速数论变换(NTT)
引入对快速傅里叶变换(FFT)的缺点进行了优化。 在计算多项式乘法(卷积)时,FFT设计三角函数、复数等很多恶心的东西,有着最大的缺点:精度问题,而在很多题目中往往需要进行取模,要求精度很高,FFT就不行了。于是就有了快速数论变换原根FFT之所以可以实现,是利用了单位复根ωω\omega的周期性质,ωnn=1,ωkn=ωk+nnωnn=1,ωnk=ωnk+n\omega_n^...原创 2018-03-06 17:28:39 · 979 阅读 · 0 评论 -
积性函数前缀和(杜教筛)
积性函数前缀和,这东西似乎非常恐怖(特别是有公式恐惧症的人),也确实很恶心。 实际上,还是比较套路的,只要推公式时试图往套路上靠,推出来的概率就比较大。看个例子来了解第一个套路原创 2018-02-24 15:45:23 · 646 阅读 · 1 评论 -
博弈论
博弈论:1.NP状态 N(next):此状态的先手必胜。 P(perv):此状态的后手必胜。 2.NP转移 终止状态为P; 能一步到达任何一个P的状态为N; 不能一步到达任何P的状态为N;原创 2017-02-10 22:06:25 · 720 阅读 · 0 评论 -
阶梯博弈
游戏开始时有许多硬币任意分布在楼梯上,共n阶楼梯从地面由下向上编号为0到n。游戏者在每次操作时可以将楼梯j(1<=j<=n)上的任意多但至少一个硬币移动到楼梯j-1上。游戏者轮流操作,将最后一枚硬币移至地上的人获胜。原创 2017-02-13 20:35:04 · 380 阅读 · 0 评论 -
斐波那契博弈
一堆石子有n颗。第一个人第一次至少取1颗,最多取n-1颗。至此后,每个人取的石子数不能超过对手前一次所取的石子数的2倍。 先手胜当且仅当n不是Fibonacci数。换句话说,必败态构成Fibonacci数列。原创 2017-02-13 21:00:49 · 444 阅读 · 0 评论 -
启发式合并
启发式合并(暴力合并),将两个数据结构合并,只需要将小的数据结构中的元素一个一个的插入大的数据结构。原创 2017-03-01 13:28:37 · 798 阅读 · 0 评论 -
后缀数组(Suffix Array)
后缀数组是处理字符串的有力工具。3个后缀数组:Sa、Rank、HeightSa存储一个字符串按字典序排列的后缀,如图 Rank数组存储后缀i的名次,就是把Sa反过来,上图中 Rank[1]==2,Rank[2]==8…… Height数组存储相邻两个Sa后缀之间公共前缀的长度,如图 求出Sa和Rank处理后缀树组有两种算法:倍增、DC3 (我只会倍增,所以只写...原创 2017-01-25 22:35:28 · 632 阅读 · 0 评论 -
快速傅里叶变换(FFT)
FFT快速傅里叶变换,O(nlogn)的将多项式的点值表示法与系数表示法互相转换,方便计算多项式乘法。原创 2017-06-05 23:40:55 · 709 阅读 · 0 评论 -
高斯消元法(高斯·约当消元法)(浮点)
高斯消元法,用于解多元一次方程(几乎类似模拟手动解方程)。 思路: 通过等式的乘除,把方程1的x1x1x_1系数a11a11a_{11}分别化为方程2~方程n的x1x1x_1系数,然后将方程2~方程n减去得到的新方程,从而消掉方程2~方程n中的x1x1x_1。接着用方程2的x2x2x_2继续把方程3~方程n中的x2x2x_2消掉…… 大概系数就成了这个样子↓ 举个例子: 一个...原创 2017-02-05 11:43:04 · 5859 阅读 · 0 评论 -
高斯消元法(高斯·约当消元法)(整数)
整数高斯消元作用在于最后得出的解可以判断是否为整数。首先看高斯消元法(浮点) 整数的高斯消元法,在消元时通过等式乘法,将同一项系数统一成它的最小公倍数,然后再进行消元。核心代码:int n,A[MAXN][MAXN*2];int gcd(int a,int b){return b==0?a:gcd(b,a%b);}int lcm(int a,int b){return a/gcd...原创 2017-02-05 16:15:41 · 2138 阅读 · 0 评论 -
网络流——最小割求最大权闭合子图
定义有一个有向图,每一个点都有一个权值(可以为正或负或0),选择一个权值和最大的子图,使得每个点的后继都在子图里面,这个子图就叫最大权闭合子图。原创 2017-08-26 17:39:04 · 8784 阅读 · 1 评论 -
欧拉回路(欧拉路径)
定义给一个连通图,求一条每条边恰好走一次的路径,就叫欧拉路径,如果要求回到原点,就叫欧拉回路。(也叫一笔画问题)原创 2017-09-01 20:02:15 · 1314 阅读 · 0 评论 -
动态规划(DP)——斜率优化
形式形如dp[i]=max(dp[j]−a[i]×b[j]+c[j])+d[i]dp[i]=max(dp[j]−a[i]×b[j]+c[j])+d[i]dp[i]=max(dp[j]-a[i]\times b[j]+c[j])+d[i]的dp方程 (a[x],b[x],c[x],d[x]a[x],b[x],c[x],d[x]a[x],b[x],c[x],d[x]为一些与x有关的式子) (需...原创 2017-10-30 15:34:06 · 725 阅读 · 0 评论 -
可持久化Treap
可持久化Treap只能使用非旋转版Treap。 非旋转Treap,即使用“合并”(Merge)和“分裂”(Split)两个操作来完成“插入”(Insert)和“删除” (Delete)操作。这样可以保证在进行插入和删除操作时,只改变一条链上的点,最多修改log2nlog_2n个结点。 可持久化Treap,就需要在插入和删除时,新建一条链的结点,作为一个新的版本。 #include<cstdio原创 2017-12-03 21:02:04 · 607 阅读 · 0 评论 -
树的点分治
用途统计所有树上两点的路径的信息,常规是O(n2)O(n^2),用此算法可已达到 O(R×nlog2n)O(R\times nlog_2n)(R为维护的数据结构时间复杂度)。主要思路通过寻找树的重心,把树分成若干块(重心的子树),再分治处理每个子树。 (重心是一个结点使它的子树中结点个数最大的值最小)由于重心的单个子树的结点个数一定小于整个树结点树的一半,所以每次使用重心分割,都能将这个树规模至少原创 2017-12-13 21:37:25 · 382 阅读 · 1 评论 -
树链剖分
用途解决树的上路径修改,查询等操作,时间复杂度O(R×log2n)O(R\times log_2n)(R为维护的其它数据结构复杂度,一般为线段树R=log2nR=log_2n)。主要思路将整棵树的边分为轻边和重边,将每个重边连成的链当作一个区间,用维护区间的数据结构去维护它。如何选择重边一般选连接子树所含节点最多的儿子作为重边,如图: 这样可以保证从根节点到任何一个节点,最多只有log2nlo原创 2017-12-18 13:22:50 · 358 阅读 · 2 评论 -
可持久化数据结构
可持久化数据结构,就是可以访问历史状态的数据结构,可以从任何一个历史版本更新出一个新的状态。like this↓ 有的数据结构还可以将其中一个版本与历史版本相减得到区间修改的信息,如权值线段树,Trie树等。实现基本上都有个套路,就是在修改数据结构信息时,将被修改的结点新建,结点之间的边保留,新建的结点就成为一个新的版本,并且将没修改的结点共用,节省空间。链接: 可持久化线段树原创 2017-12-03 20:22:40 · 402 阅读 · 1 评论 -
莫比乌斯反演
简介当一个函数f(x)f(x)f(x)计算十分复杂时,如果方便计算出它的倍数的和,或因数的和g(x)g(x)g(x),可先计算出g(x)g(x)g(x),再通过莫比乌斯反演计算出f(x)f(x)f(x)。 例子: g(1)=f(1)g(1)=f(1)g(1)=f(1) g(2)=f(1)+f(2)g(2)=f(1)+f(2)g(2)=f(1)+f(2) g(3)=f(1)+f(3)g(...原创 2017-02-21 14:02:35 · 638 阅读 · 0 评论 -
线性规划——单纯形法
问题标准型问题:最大化∑j=1ncjxj\sum\limits_{j=1}^{n}c_jx_jj=1∑ncjxj满足约束∑j=1naij⋅xj≤bi&nbsp;(i=1,2,...,m)\sum\limits_{j=1}^{n}a_{ij}\cdot x_j\le b_i\ (i=1,2,...,m)j=1∑naij⋅xj≤bi&nbsp;(i=1,2,...,m)且 xj≥...原创 2019-03-18 21:46:23 · 2308 阅读 · 0 评论