
算法入门
文章平均质量分 90
hezlik
一个 fisher man。
展开
-
基础网络流与上下界网络流
一些简单的说明.基本的东西都烂大街了,这里大概会写一些不那么基本的东西,所以想学基本网络流的就不用看了.一.网络流基本概念.(无源汇)网络:网络是一张图G=(V,E)G=(V,E)G=(V,E),每条边(x,y)∈E(x,y)\in E(x,y)∈E都有一个流量上限f(x,y)f(x,y)f(x,y).流函数:一个流函数是一个定义在网络G=(V,E)G=(V,E)G=(V,E)的边上的实值函数F(x,y)F(x,y)F(x,y),满足:容量限制:对于任意(x,y)∈E(x,y)\in E(x,原创 2020-07-12 21:27:32 · 470 阅读 · 0 评论 -
各类多项式操作的暴力递推法
一.一些约定.对于接下来的所有操作,我们都是给出F(x)F(x)F(x),求G(x)=T(F(x))G(x)=T(F(x))G(x)=T(F(x)),其中T()T()T()是操作函数,我们的目标是在O(n2)O(n^{2})O(n2)的时间复杂度内完成所有操作.多项式F(x),G(x)F(x),G(x)F(x),G(x)的系数分别为fi,gif_i,g_ifi,gi.二.多项式求逆.对于一个多项式F(x)F(x)F(x),我们要求G(x)G(x)G(x)满足F(x)G(x)=1F(x)G(x原创 2020-06-03 21:09:27 · 819 阅读 · 1 评论 -
行列式与矩阵树定理入门
一.行列式及其初等变换.行列式:行列式是一个定义域为矩阵,值域为数值的函数,记为∣A∣|A|∣A∣或detA\det AdetA,定义式如下:∣A∣=detA=∑p(−1)C(p)∏i=1nAi,pi|A|=\det A=\sum_{p}(-1)^{C(p)}\prod_{i=1}^{n}A_{i,p_i}∣A∣=detA=p∑(−1)C(p)i=1∏nAi,pi设AAA的长度为nnn,则ppp是一个长度为nnn的排列,C(p)C(p)C(p)表示排列ppp中的逆序对数.定理1.1:原创 2020-06-01 13:54:34 · 639 阅读 · 0 评论 -
生成函数多项式操作合集
一.生成函数与多项式乘法.众所周知,生成函数是OI中的计数利器,而很多生成函数的题目需要快速计算式子中的多项式运算,所以本篇主要是介绍多项式运算的.值得注意的是,这里很多奇怪的多项式运算本来是不存在模xnx^nxn意义下的定义的,但是由于生成函数是形式幂级数,所以直接取泰勒展开后的结果就是了.多项式乘法作为最基础的多项式运算,这里不再介绍,具体参见快速傅里叶变换FFT与快速数论变换NTT入门...原创 2020-03-23 20:24:05 · 1502 阅读 · 0 评论 -
主席树(可持久化线段树)入门详解
一.问题引入.当我们遇到要求快速查询区间的问题时,通常用线段树、平衡树等数据结构维护这类问题.但是使用这些数据结构的前提是要求区间信息可以快速合并(例如O(1)O(1)O(1)或O(logn)O(\log n)O(logn)合并),还有很多问题是不可以这样做的,例如区间第k小的问题.区间第k小问题可以使用很多数据结构来解决,例如划分树、归并树、分块、树套树等数据结构来解决,然而这些数据结构一...原创 2019-02-13 07:34:46 · 748 阅读 · 0 评论 -
拉格朗日插值相关
一.插值的定义.插值:给定若干个点(xi,yi)(x_i,y_i)(xi,yi),确定一条函数曲线f(x)f(x)f(x)满足对于所有iii,有f(xi)=yif(x_i)=y_if(xi)=yi的过程称为插值.多项式插值:给定n+1n+1n+1个xix_ixi两两不同的点(xi,yi)(x_i,y_i)(xi,yi),确定一个多项式f(x)=∑i=0naixif(x)=\sum...原创 2020-02-28 17:22:08 · 255 阅读 · 0 评论 -
竞赛图(有向完全图)上哈密顿路径的若干性质(BZOJ4727 [POI2017]Turysta 题解)
一.竞赛图与哈密顿路径的定义.竞赛图:竞赛图是一张有向无环图G={V,E}G=\{V,E\}G={V,E},满足有∣E∣=∣V∣(∣V∣−1)|E|=|V|(|V|-1)∣E∣=∣V∣(∣V∣−1)边且两点之间仅有一条边,也就是说两点之间有且仅有一条边.哈密顿路径:一条经过nnn个点的简单路径,即不能重复经过一个点.哈密顿回路:一条哈密顿回路相当于一条哈密顿路径的终点与起点也通过一条边连起来...原创 2020-02-28 15:37:43 · 5367 阅读 · 0 评论 -
计算几何初步
先屯个基本板子,以后慢慢补.const double eps=1e-8,pi=acos(-1);struct vec{ double x,y; vec(double X=0,double Y=0){x=X;y=Y;} vec operator + (const vec &p)const{return vec(x+p.x,y+p.y);} vec operator - ...原创 2019-12-10 08:07:43 · 631 阅读 · 0 评论 -
基本DP模型总结
前言.这篇文章不贴代码,只是介绍最基本的DP模型,基本都是列出基本的状态和转移方程或者导向另一篇题解.约定:1.记[a][a][a]表示判定表达式aaa是否为真,为真则值为111,为假则值为000.2.记fakfa_{k}fak表示kkk的父亲节点,sonkson_{k}sonk表示kkk的子节点集合.3.记f↔gf\leftrightarrow gf↔g表示状态ggg会对状态fff...原创 2019-11-11 13:28:20 · 5004 阅读 · 0 评论 -
Catalan数学习笔记
一.Catalan数列.原创 2019-03-04 19:23:30 · 681 阅读 · 0 评论 -
数论函数相关
一.几个基本的数论函数.数论函数:数论函数定义为定义域为正整数的函数.积性函数:若有数论函数f(x)f(x)f(x)满足gcd(n,m)=1\gcd(n,m)=1gcd(n,m)=1时f(nm)=f(n)f(m)f(nm)=f(n)f(m)f(nm)=f(n)f(m),则函数fff被称为积性函数.完全积性函数:若有数论函数f(x)f(x)f(x)满足任何时候f(nm)=f(n)f(m)f(...原创 2019-10-25 16:36:26 · 886 阅读 · 2 评论 -
抽象代数相关概念
一.代数结构及其相关的一些概念.代数结构:代数结构是一个多元组,多元组中的元素是集合、二元运算、二元关系,且必须包括至少一个集合和一个二元运算或二元关系.代数结构公理:一个代数结构需要满足的特定条件称为代数结构的公理.下面将给出一些比较常见的代数结构公理.封闭性:称集合SSS关于二元运算⋅\cdot⋅满足封闭性,当且仅当:x,y∈S⇒x⋅y∈Sx,y\in S\Rightarrow x...原创 2019-10-23 21:30:44 · 2174 阅读 · 0 评论 -
复杂度分析相关
一.复杂度的定义.复杂度:复杂度是衡量一个代码质量的重要指标,主要分为时间复杂度与空间复杂度,其中又以时间复杂度更为重要.复杂度记号:一个算法XXX的复杂度上界O(X)O(X)O(X)定义为XXX的运行总量多项式只保留最高次项并去掉常数后的值,例如:O(3n2+5n+7)=O(n2)O(78n+10log3.4n)=O(n)O(5n2log3.53(100n))=O(n2log3n)O...原创 2019-10-19 21:05:23 · 546 阅读 · 0 评论 -
若干递推数列的通项公式求解方法
一.等差与等比数列.等差数列:以下数列被称为等差数列:fn=a+fn−1f_n=a+f_{n-1}fn=a+fn−1这个数列的通项公式为:fn=f0+naf_{n}=f_{0}+nafn=f0+na设sn=∑i=0nfis_{n}=\sum_{i=0}^{n}f_{i}sn=∑i=0nfi,则有:sn=(n+1)f0+an(n+1)2s_{n}=(n+1)f_{...原创 2019-10-14 15:37:44 · 1239 阅读 · 1 评论 -
取整函数相关
一.取整函数的引入.取整函数大致可以分为四类:上取整,下取整,向0取整,四舍五入取整.对一个数x上取整和下取整分别使用这两种符号:⌈x⌉,⌊x⌋\left\lceil x\right\rceil,\left\lfloor x\right\rfloor⌈x⌉,⌊x⌋由于计算机中使用下取整函数居多,所以本文多介绍下取整函数的性质.二.取整函数的定义.前两类取整函数分别可以看做是这样...原创 2019-01-31 23:16:10 · 610 阅读 · 0 评论 -
欧拉函数相关
一.欧拉函数的定义.欧拉函数:定义欧拉函数ϕ(n)\phi(n)ϕ(n)表示[1,n][1,n][1,n]中与nnn互质的数的个数,即:ϕ(n)=∑i=1n[gcd(n,i)=1]\phi(n)=\sum_{i=1}^{n}[\gcd(n,i)=1]ϕ(n)=i=1∑n[gcd(n,i)=1]所以下次看到这个式子就知道是个欧拉函数的定义式了.二.单个欧拉函数的计算.根据定义,...原创 2019-09-21 12:55:36 · 434 阅读 · 0 评论 -
同余理论相关
一.取模与同余的定义.取模:定义aaa对bbb取模后的值a  mod  b=a−[ab]ba\,\,mod\,\,b=a-\left[\frac{a}{b}\right] bamodb=a−[ba]b,其中[][][]表示向000取整,bbb必须为正整数.同余:定于aaa和bbb在...原创 2019-10-09 19:51:39 · 1633 阅读 · 1 评论 -
高精度类模板
一个用来屯高精度类板子的模板.基本都是用最朴素的万进制压位实现的高精度,乘法没有FFT,除法没有倍增.代码如下:struct unsigned_bigint{ int a[N+9],n; unsigned_bigint(int X=0){memset(a);for (n=0;X;X/=10000) a[++n]=X%10000;if (!n) n=1;} unsign...原创 2019-10-02 07:27:59 · 246 阅读 · 0 评论 -
整除理论与线性丢番图方程相关
一.整除的定义.整除:对于两个自然数a,ba,ba,b,若存在一个自然数xxx满足ax=bax=bax=b,则称aaa整除bbb,记为a∣ba|ba∣b.显然{N,∣}\{N,|\}{N,∣}组成一个偏序集.因数(约数):对于一个自然数nnn,任意aaa满足a∣na|na∣n都称为nnn的因数.倍数:对于一个自然数nnn,任意aaa满足n∣an|an∣a都称为nnn的倍数.二.约数函...原创 2019-09-24 22:08:46 · 1805 阅读 · 0 评论 -
素数与筛法相关
一.素数定义与判定.素数:又称质数,一个大于111的正整数nnn定义为素数,当且仅当不存在一个数字i∈[2,n)i\in [2,n)i∈[2,n)满足i∣ni|ni∣n.之后我们将素数集记为PPP.合数:一个大于111的正整数定义为合数,当且仅当它不是个素数.根据素数的定义,我们可以很容易的写出一个判定素数的代码:bool Check_prime(int n){ if (n==1) ...原创 2019-09-15 16:30:14 · 527 阅读 · 1 评论 -
快速傅里叶变换FFT与快速数论变换NTT入门
一.FFT引入.离散傅里叶变换DFT,是一种用于将多项式从系数表示转化为点值表示的多项式变换.快速傅里叶变换FFT,是一种O(nlogn)O(n\log n)O(nlogn)的傅里叶变换,在OI中占有重要地位,主要用与优化卷积过程.卷积,即给定ai,bia_i,b_iai,bi,求ci=∑i=0naibn−ic_i=\sum_{i=0}^{n}a_ib_{n-i}ci=∑i=0na...原创 2020-02-28 15:39:02 · 991 阅读 · 0 评论 -
AC自动机入门详解
一.AC自动机的引入.我们都知道KMP可以用来一个子串与母串之间的匹配,只需要通过一个next指针就可以实现O(n+m)匹配,已经达到了算法下界,是一个很优秀的算法了.但是我们如何考虑多个子串与母串之间的匹配呢?如果多个子串与母串之间的匹配用KMP来实现,效率可能就不那么高了,这可怎么办呢?这就是AC自动机的由来.AC自动机是什么?其实就是在Trie树上跑KMP.二.Trie树与KM...原创 2020-02-28 15:37:33 · 499 阅读 · 0 评论 -
虚树与树链的并入门
虚树入门原创 2019-07-24 22:48:21 · 361 阅读 · 0 评论 -
基础组合数学学习笔记
一.组合数的定义.下降幂:我们把从nnn个不同的数中选出mmm个数组成不同序列(考虑顺序)的数量称为nnn的mmm阶下降幂,记为nm‾n^{\underline{m}}nm,即:nm‾=∏i=1m(n−i+1)=n(n−1)(n−2)⋯(n−m+1)=n!(n−m)!n^{\underline{m}}=\prod_{i=1}^{m}(n-i+1)=n(n-1)(n-2)\cdots(n-m...原创 2019-08-10 09:15:24 · 3418 阅读 · 1 评论 -
群论与置换群入门
一.群的定义.群:群是一个二元组G=(S,f)G=(S,f)G=(S,f),其中SSS是一个集合,fff是一个二元运算,满足:封闭性:x,y∈S⇒f(x,y)∈S,x,y\in S\Rightarrow f(x,y)\in S,x,y∈S⇒f(x,y)∈S,.结合律:x,y,z∈S,f(x,f(y,z))=f(f(x,y),z)x,y,z\in S,f(x,f(y,z))=f(f(x,y),...原创 2019-08-18 06:56:27 · 4410 阅读 · 0 评论 -
Fibonacci数相关
一.Fibonacci数的定义.Fibonacci数:Fibonacci数fnf_nfn定义为初值为f0=0,f1=1f_0=0,f_1=1f0=0,f1=1且在n>1n>1n>1时递推公式为fn=fn−1+fn−2f_n=f_{n-1}+f_{n-2}fn=fn−1+fn−2的数列.这个数的组合意义可以理解为一个1∗n1*n1∗n的空间用1∗11...原创 2019-08-22 20:38:39 · 522 阅读 · 0 评论 -
错位排列相关
一.错排问题与错排数.错排问题:对于一个排列pip_ipi,有多少种重新排列的方法使得重排后的序列pi′p'_ipi′满足对于任意位置iii都有pi≠pi′p_i=\not{}p'_ipi≠pi′.容易发现这个问题中的方案数只与排列的长度有关,与具体在第iii个位置的pip_ipi无关,所以我们有了错排数这样一个概念.错排数:对于一个长度为...原创 2019-08-23 12:28:23 · 945 阅读 · 0 评论 -
生成函数相关
一.生成函数定义.生成函数:定义一个无穷数列fif_ifi的(普通型)生成函数F(x)=∑i=0+∞fixiF(x)=\sum_{i=0}^{+\infty}f_ix^{i}F(x)=∑i=0+∞fixi,其中xix^{i}xi只是一个标志.生成函数本质上是定义在复数域上的形式幂级数.并不是所以初等函数及其复合都是一个有意义的生成函数,事实上一个有意义的生成函数F(x)F(x)F(x)需要满足存在无穷数集SSS,使得对于任意x∈Sx\in Sx∈S有F(x)F(x)F(x)收敛.当然,由于常数原创 2019-08-25 20:36:54 · 664 阅读 · 0 评论 -
最大流最小割定理与最小割的数学模型
一.最大流最小割定理.割:对于一张网络,我们称一个边集的子集为一个割,当且仅当去掉这个边集的子集后源点SSS无法到达汇点TTT.最小割:边权和最小的割被称为最小割.最大流-最小割定理:一张网络的最大流等于其最小割的边权之和.这个东西太经典了这里就不证了.二.最小割的可行边与必经边.显然一张网络可能有不止一个最小割,那么我们如何确定一条边是最小割的可行边或者必经边?首先考虑对网络跑一遍最大流,此时我们会得到一张残余网络(算上反向边).首先,容易发现如果一条边没有满流,那么这条边必然不是任意原创 2020-07-18 07:50:13 · 817 阅读 · 1 评论 -
反演原理相关
一.反演原理.其实我也不知道下面的定义到底是不是对的QAQ…演绎(正演):对于原数列fif_ifi和新数列gig_igi,我们称它们之间gi=∑j=0iai,jfjg_i=\sum_{j=0}^{i}a_{i,j}f_jgi=∑j=0iai,jfj的关系为演绎(正演).反演:对于演绎gi=∑j=0iai,jfjg_i=\sum_{j=0}^{i}a_{i,j}f_jgi=∑j=...原创 2019-09-28 21:11:22 · 1398 阅读 · 0 评论 -
stirling(斯特林)数相关
一.第一类stirling数.第一类stirling数:第一类stirling数S1(n,m)S1(n,m)S1(n,m)表示nnn个球划分为mmm个不为空的环的方案数.其中环的意义是一个序列把头放到尾仍然是原序列,也就是说1,2,3,41,2,3,41,2,3,4与2,3,4,12,3,4,12,3,4,1是同一个环.第一类stirling数可以通过递推来求得,考虑S1(n,m)S1(n,...原创 2019-09-28 22:03:39 · 694 阅读 · 0 评论 -
偏序关系与偏序集相关
一.偏序集的定义.偏序集:定义一个偏序集是由一个集合SSS与一个二元关系≤\leq≤组成的二元组G={S,≤}G=\{S,\leq\}G={S,≤},满足:自反性:对于任意元素x∈Sx\in Sx∈S,有x≤xx\leq xx≤x.传递性:对于任意元素x,y,z∈Sx,y,z\in Sx,y,z∈S,若x≤y,y≤zx\leq y,y\leq zx≤y,y≤z,则x≤y≤zx\leq y\l...原创 2019-08-28 18:34:58 · 6843 阅读 · 0 评论 -
斜率优化DP入门(BZOJ1010 玩具装箱题解)
一.斜率优化的 作用.斜率优化主要针对这样一类方程进行优化:f[i]=ai+minj=0i−1{f[j]+bj+ci∗dj}f[i]=a_i+\min_{j=0}^{i-1}\{ f[j]+b_j+c_i*d_j \}f[i]=ai+j=0mini−1{f[j]+bj+ci∗dj}其中min\minmin也可以换成max\maxmax,ai,bi,ci,dia_i,b_i...原创 2020-02-28 15:36:26 · 256 阅读 · 0 评论 -
最大流及其增广路算法入门(Emonds-Karp & Dinic & ISAP)
**一.最大流的定义.****网络**:我们称一张带权有向图$G=\{V,E\}$为网络,当且仅当这张有向图中有两个特殊点$s,t$,其中$s$称为原点,$t$称为汇点.**容量**:在一张网络上某条边$(x,y)$的边权称之为这条边的容量,这里记为$c(x,y)$.**流函数**:对于每条边有一个函数$f(x,y)\leq c(x,y)$,我们称$f$为流函数.**流量守恒**:对于每一个点$x=\not{}s$且$x=\not{}t$,流函数必须满足:$$\sum_{(i,x)\in原创 2020-02-28 15:38:09 · 525 阅读 · 0 评论 -
分治法求平面最近点对入门
一.平面最近点对问题.平面最近点对:在一个平面上有nnn个点,求出距离最近的两个点.平面最近点对是计算几何中一个十分经典且基础的问题,通常采用分治法来解决.二.直线最近点对的分治法.在用分治法解决平面最近点对之前,我们用分治法来解决一下直线最近点对问题.考虑在一条直线上暴力枚举两个点并计算距离取最小,很明先复杂度是O(n2)O(n^2)O(n2)的,比较慢.于是我们考虑先给nnn的...原创 2020-02-28 15:39:12 · 1754 阅读 · 0 评论 -
容斥原理相关
一.补集转化.补集转化:对于两个集合U,SU,SU,S满足S⊆US\subseteq US⊆U,我们有:∣S∣=∣U∣−∣∁US∣|S|=|U|-|\complement_{U}S|∣S∣=∣U∣−∣∁US∣根据补集的定义即可得到上式.对应到计数问题中,当我们计算满足某个条件的方案数时,可以先计算出总共的方案数,再计算出不满足这个条件的方案数,前者减去后者就是原问题的答案.二....原创 2019-09-13 15:24:53 · 513 阅读 · 0 评论 -
树的直径相关
一.树直径的定义.树的直径:一棵树的直径定义为这棵树上一条边权和最大的路径.显然一棵树上可能有不止一条树的直径.二.非负边权树的直径.对于一棵边权非负的...原创 2019-09-09 17:12:43 · 439 阅读 · 0 评论 -
分治FFT与多项式点值插值
一.多项式乘法.作为最基础的多项式运算,这里不再介绍,具体参见快速傅里叶变换FFT与快速数论变换NTT入门.这里的多项式乘法卡常技巧不会过于深入,且只适用于FFT.二.分治FFT.分治FFT其实并不是一个算法,它只是分治里面用FFT处理信息,不过这个东西有一些经典的模型.比如给定gig_igi,要求:fi=∑j=1ifi−jgjf_i=\sum_{j=1}^{i}f_{i-j}...原创 2020-03-19 19:32:38 · 572 阅读 · 0 评论 -
多项式乘法卡常技巧与任意模数NTT
一.普通多项式乘法.作为最基础的多项式运算,这里不再介绍,具体参见快速傅里叶变换FFT与快速数论变换NTT入门.这里的多项式乘法卡常技巧不会过于深入,且只适用于FFT.二.多项式乘法优化1.这是一种非常简单的多项式乘法常数优化,对于两个系数为实数的多项式A(x),B(x)A(x),B(x)A(x),B(x),我们写成一个多项式P(x)P(x)P(x):P(x)=A(x)+iB(x)...原创 2020-03-18 14:09:25 · 987 阅读 · 0 评论 -
各类平衡树的学习(零)——二叉搜索树BST
一.一道模板题.题目:BZOJ3224.题目大意:在序列上维护一个数据结构支持:1.插入数xxx.2.删除数xxx(只删一个).3.查找xxx的最小排名.4.查找排名为xxx的数.5.查找xxx的前驱.6.查找xxx的后继.1≤n≤1051\leq n\leq 10^51≤n≤105.这种题目一般都会用平衡树这种数据结构来维护,而所有平衡树都得基于二叉搜索树BST,所以这篇文章...原创 2020-02-28 15:39:30 · 275 阅读 · 0 评论