随笔 - 26  文章 - 0  评论 - 0  阅读 - 2567 

一些常用的结论

1、Hall定理推论:最大匹配数=|X|-max(|W||next(W)|,,0)

其中X是左部分的点集,|W|X中的一个点集,N(W)W的所有邻居(二分图上)

2、关于莫比乌斯反演

整出分块降复杂度

l=min(n(n/l),m/(m/l))r=l+1l1

莫比乌斯反演

F(n)=n|df(d)f(n)=n|dF(d)μ(dn)F(n)=d|nf(d)f(n)=d|nF(nd)μ(d)Fμd(ij)ijd(ij)=x|iy|j[gcd(x,y)==1]

证明:

d(ij)=x|iy|j[gcd(x,y)==1]

我们考虑把每个因子一一映射。

如果ij的因子k中有一个因子pci中有因子paj中有因子pb。我们规定:

  • 如果 ca,那么在 i中选择。
  • 如果 c>a,那么我们把c减去a,在j中选择pca(在 j 中选择 pe 表示的是 pa+e

对于 ij的因子 k 的其他因子同理。于是对于任何一个 k 有一个唯一的映射,且每一个选择对应着唯一的 k

通过如上过程,我们发现:对于 ij 的因子 k=pici,我们不可能同时在 ij中选择 pe(优先在 i 中选择,如果不够就只在 j 中选择不够的指数),故 xy 必须互质。

等式得证。----from Luogu Siyuan

一些经验:杜教筛递归时尽可能减少递归次数

杜教筛常用技巧

μI=eμId=φφI=Idi=1ni=n(n+1)2i=1ni2=n(n+1)(2n+1)6i=1ni3=(i=1ni)2=(n(n+1)2)2

杜教筛套路:

S(n)=i=1f(i)i=1n(fg)(i)=i=1nd|if(d)g(i/d)=d=1ng(d)d|if(id)=d=1ng(d)i=1ndf(i)g(1)S(n)=i=1n(fg)(i)i=2g(i)S(ni)

遇到过的一个模型:

f(i)=φ(i)i2,g(i)=i2i=1n(fg)(i)=i=1nd|iφ(d)d2(id)2=i=1ni2d|iφ(d)=i=1ni3g(1)S(n)=i=1(gf)(i)i=2g(i)S(ni)f(i)=φ(i)i,g(i)=i(fg)(i)=i2

结论补充:

i=1n[gcd(i,n)==1]i=φ(n)n+[n==1]2:n2,gcd(i,n)==1gcd(ni,n)==1,nφ(n),/2n=1

由莫比乌斯函数前缀和性质:

i=1nd|iμ(d)=1i=1nμ(d)nd=1

关于求逆元:如果有n个已知的待求逆元的数,可以用类似求阶乘的方法预处理出每个数的逆元 O(n)

3、inplace_merge函数

包含在 algorithm 头文件

一个数组a,假设存在分界点mid,保证mid两端排序方式相同

使用:inplace_merge(a+L,a+mid,a+R,cmp)

cmp没有默认按值升序,

操作区间:[a+L,a+mid),[a+mid,a+R),左开右闭

inplace_merge,在分配缓存成功时,时间复杂度O(M+N),空间复杂度看分配的缓存,即可能为O(M),O(N)O(M+N),否则,时间复杂度为O(Nlog(N)),空间复杂度为O(1)

保证合并的两个部分的原有元素顺序不

4、二项式定理

(nm)=n!m!(nm)!F(n)=i=0n(ni)G(i):G(n)=i=0n(1)ni(ni)F(i)F(n)=i=kn(ik)G(i):G(n)=i=kn(1)ik(ik)F(i)

来看一些二阶(?)的情况

f(n,m)=i=0nj=0m(ni)(mj)g(i,j)g(n,m)=i=0nj=0m(1)ni+mj(ni)(mj)f(i,j)线f(i,j)=x=iny=jm(xi)(yj)g(x,y)g(i,j)=x=iny=jm(1)xi+yj(xi)(yj)f(x,y)

5、常见的定义

完全祖先/后代:不包括自身的祖先/后代

6、一堆结论

在一个半径为R的圆内等概率走,欧几里得距离的平方的期望是R22

S=i=1ni[gcd(i,n)=1]S+S=i=1ni[gcd(i,n)==1]+i=1n(ni)[gcd(ni,n)==1]=nφ(n)S=(nφ(n)+[n=1])/2

欧拉函数n时间内利用积性函数性质求,φ(pk)=pkpk1,还可以提前筛出质因子加速51nod1363

可以用来化式子 x2+x2=x

定义一个新函数msf(n)=maxd2|n d,即n的最大平方因子,容易想到有:

μ(n)2=[msf(n)==1]=d|msf(i)μ(d)d|msf(i)d2|i,    loj6181

一个超大质数(hash防冲突?)

10000000000000061=1e16+61

欧拉回路注意起点的循环同构现象

7、不太常用的latex公式

N

±

63

12X左部上下标

屏幕放大或缩小ctrl+shift+ 上面一排那个数字后面的+ - 号

8、决策单调性优化:四边形不等式

称一个二维序列f满足四边形不等式,当且仅当:a<bc<d,a,b,c,dN+,fa,d+fb,cfa,c+fb,d

推导:

a<b,a,bN+,fa,b+1+fa+1,bfa,b+fa+1,b+1

fa,b+1fa,bfa+1,b+1fa+1,b

fa,b+1fa,bfa+i,b+1fa+i,b

最后有这个结论:fa,b+jfa,bfa+i,b+jfa+i,b

9、斐波拉契数列(我的弱项)

广义(?)斐波拉契数列:

5,3,2,1,1,|0,1,1,2,3,5i<0   fi=1i+1fi

斐波拉契数列

F0=0,F1=1Fn=FkFnk+1+Fk1FnkFn=F2Fn1+F1Fn2=Fn1+Fn2Fk12+Fk1FkFk2=(1)k

矩阵乘法:矩阵乘法只满足结合律,不满足交换律

|1110||1001||f2f1f1f0|n|fn+1fnfnfn1|

要背的结论:在mod 1e9+9的意义下,5的二次剩余是383008016

斐波拉契数列的生成函数F(x)=x1xx2

卡特兰数的生成函数H(x)=114x2x,H(0)=1

牛顿二项式定理:

(nk)=rk_k!rC(),kN(1+x)α=n>=0(αn)xn

普通生成函数(OGF)

an=<1,2,3,4...>F(x)=n0(n+1)xn=n1nxn1=n0(xn)=(11x)=1(1x)2an=(m+nn)F(x)=n0(n+mn)xn=1(1x)m+1an=<1,0,1,0,1,...>F(x)=n0x2n=11x2an=<0,1,0,1,0...>F(x)=n0x2n+1=x1x2

指数生成函数(EGF)

F(x)G(x)=i0aixii!j0bjxjj!=n0xni=0naibni1i!(ni)!=n0xnn!i=0n(ni)aibnin0xnn!=exn0anxnn!=eax()

长度为n的排列数的EGF

F(x)=n0n!xnn!=n0xn=11x

n个数的圆排列的EGF(第一类斯特林数——列)

G(x)=n1(n1)!xnn!=n1xnn=ln(1x)=ln(11x)

容易发现exp(G(x))=F(x),可以理解成一个排列的数irealposi连边,形成若干个置换环

错排数,不存在在长度为1的置换环

n2xnn=ln(1x)xAns(x)=exp(ln(1x)x)

get新姿势:51nod1728,一个不可重集大小为s,构造映射函数f(i)=j,一组递归函数可解当且仅当在有限次操作后存在f(f(f(...f(x)...))=x,f(x)=x可解的递归函数恰好有(s+1)s1

不动点

<Empty Math Block>

10、斯特林数总结(我的弱项)

上升幂

xn¯=x(x+1)(x+2)...(x+n1)=(x+n1)!(x1)!

下降幂

xn_=x(x1)(x2)...(xn+1)=x!(xn)!

上升幂下降幂的转换

xn_=(1)n(x)n¯xn¯=(1)n(x)n_

第一类斯特林数S1(n,k)表示的是将n个不同元素构成k个圆排列的数目,

其中一个应用:划分数字后每个划分取最值(圆排列)的排列数

[nk]=[n1k1]+(n1)[n1k]

第二类斯特林数S2(n,k)表示的是把n个不同元素划分到k个集合的方案数(组合数)

{nk}={n1k1}+k{n1k}

第二类斯特林数的应用:组合数意义(超重要)

nm=k=0m{mk}(nk)k!

m个数[1,n],有nm种方案,枚举有k个不等价类各有多少方案

二项式反演一下

k!{mk}=i=0k(1)ki(ki)im

推式子可以用到的结论:
求杨辉三角一列的和

i=LR(iL)=(R+1L+1)

i=1m(1ix)=reverse(i=1m(xi))

快速求第二类斯特林数——行

{mk}=1k!i=0k(1)kik!i!(ki)!im=i=0k(1)ki(ki)!imi!

第二类斯特林数——列(EGF)

k!i=0xii!=(ex1)k

关于第二类斯特林数——列(EGF)提供,另一种分治写法

H(n)=i{in}xi=i(n{i1n}+{i1n1})xi=ni{i1n}xi+i{i1n1}xiH(n)=nxH(n)+xH(n1)H(n)=x1nxH(n1)H(n)=xni1ixH(0)=1

斯特林数与阶乘之间的关系

通常幂转下降幂(第二类斯特林数)

nm=k=0m{mk}(nk)k!=k=0m{mk}nk_

上升幂转第一类斯特林数

xn¯=kn[nk]xk

第一类斯特林数——行(倍增)

O(2nlogn),xn¯x2n¯=xn¯(x+n)n¯f(x)f(x+k),OGFntt

第一类斯特林数——列

先提供一种分治O(nlog2n)做法

套路:1个第一类斯特林数的母函数是f,则k个的母函数是fk

设单个圆排列的EGFf=(i1)!xii!=xii,对这个倍增做log(k)次长度位nntt就可以了

补个最后操作的式子 n!k!ai=n(ai1)!ai!

补个坏消息,被卡了.其他写法先鸽这吧

斯特林反演

f(n)=k=0n{nk}g(k)g(n)=k=0n(1)nk[nk]f(k)

互逆操作

k=mn(1)nk[nk]{km}=[n==m]k=mn(1)nk{nk}[km]=[n==m]

下降幂推导,证明考虑ji整体下移

(j1)i1_=ji_(j1)i_i

11、多项式推式子用

:ex=i=0xii![xk]xkv=0nvk=v=0n[xk]evx,

ln(11(ax)v)=j=11j(ax)vj

麦克劳林级数

i=0xii!=ex

定和取模中学到的技巧 gym102586e Count Modulo 2

f(x)p:fp(x)f(xp) (mod p)fpk(x)f(xpk) (mod p)

i=0xi=11xx,ax,x+x2

12、凸包

叉积:给定两个向量a=(x1,y1),b=(x2,y2),a×b=|a|×|b|×sinθ=x1y2x2y1

凸包上应用:

a×b>0等价于ba的逆时针180度内

a×b<0等价于ba的顺时针180度内

a×b=0等价于ba共线(同向或反向)

叉积和三角形面积:

S=12a×b=12|a|×|b|×sinθ=12(x1y2x2y1)

应用:解析几何和计算几何(计算凸包直径:旋转卡壳)

一般使用叉积建议把角度控制在180度内方便理解和处理

wqs二分:费用流是凸的.

13、高精度

含大数组的结构体(如高精)不要定义太多次,多写重载,调用this

14、树的性质

直接在nn2种树(prufer序列)里面随机树高是O(n),

如果用给2 ~ n依次在1 ~ i1里随机一个父亲,则树高期望是O(log(n)),这种建法的方案数是(n1)!

对于树(森林):连通块个数=点数-边数

最小生成树:平面图和其对应的对偶图的MST数量相等,因为每一个平面图的生成树可以映射到对偶图上。具体的:对偶图上夹着平面图生成树边的两个平面不能通过这条边相连.

树的直径性质:设树上一个点集的直径端点为a,b,另一点集的直径端点为c,d,则两个点集的并的直径端点必然是a,b,c,d其中两个

如果一棵子树里钦定某个点i做根,概率是1szi,这个可以扩展到加权的情况,如果一个序列里要求一个数i在最前面出现,则有概率是valival

15、图

平面图性质:m3n6(边数点数*3-6)

欧拉定理:

对于连通图:V+FE=2(点数+面数-边数=2)

对于仙人掌(森林):连通块个数=点数-边数+环数

16、字符串

结论:一颗无根树上任意一条路径必定可以在以某个叶节点为根时,变成一条从上到下的路径(利于广义 SAM 的使用)

17、计数问题

对于图上两点(a,b),(c,d),如果是一般的往右和往上移动,方案数为

(ca+dbca)

但如果是往4个方向移动len步,对坐标轴旋转45度,方案数则为

(len12(len+ca+db))(len12(len+ca+bd))

应该也可以组合数枚举len步内的其中三个方向操作的位置

18、 FWT(快速沃尔什变换)

思来想去决定背下来

首先要让数组长度是2n,若n=0

FWT(A)=A

对于任意运算符号都有,同时都满足结合律和交换律

FWT(A+B)=FWT(A)+FWT(B)=j=12iAj+Bj

按位或:

FWT(A)=FWT(A0),FWT(A0+A1)UFWT(A)=UFWT(A0),UFWT(A1A0)

A0,A12i1时的答案,操作时认为A02i的低位部分,A12i的高位部分,这里的操作可以看成把数组前后两部分顺序接起来

按位与:

FWT(A)=FWT(A0+A1),FWT(A1)UFWT(A)=UFWT(A0A1),UFWT(A1)

亦或:

FWT(A)=FWT(A0+A1),FWT(A0A1)UFWT(A)=UFWT(A0+A1)2,UFWT(A0A1)2

同或:(字面意思)

FWT(A)=FWT(A1A0),FWT(A1+A0)UFWT(A)=UFWT(A1A0)2,UFWT(A1+A0)2

19、建图小技巧

遇到奇怪的建图方法可以考虑借鉴分层图,运用一种电梯升降的写法把边权间的关系表现出来,具体来说要在电梯的每一层提供足够的可行转移,提供一层转入,一层转出,可能再有一层中转.

另外还有笛卡尔树,K-D tree,线段树,主席树优化建图,用于处理一些特殊的问题

20、树状数组维护等差数列(痛点)

没事,暂时可以用线段树维护,记住我的维护方法首项是0,区间覆盖时要手算一下

21、扩展欧拉定理

一般的欧拉定理 对于质数p,有aφ(p)1(mod p)

扩展欧拉定理,考虑对任意正整数p取模,a是任意整数

如果gcd(a,p)=1,有axax mod φ(p)

如果gcd(a,p)1,有axax mod φ(p)+φ(p),

可以简写成axax mod φ(p)+φ(p) (mod p),上式成立前提是x>=φ(p)

22、好用的编译命令

g++配置:windows中输入“系统变量”——>“环境变量”——>“Path”(”Stu的用户变量“,也可以带上“系统变量”)——>“新建”——>C:\Program Files (x86)\Dev-Cpp\MinGW64\bin 复制这段

一些编译命令:

g++ -v(这是一个返回参数,一般题目会给)

fc 文件比较(一般对拍用)

cd 跳转到某个目录(如 cd C:\Program Files (x86)\Dev-Cpp\MinGW64\bin )

cd.. 跳到上一个目录

鼠标右键可以粘贴

对拍时直接调用exe文件,如果对拍结果闪掉(窗口出结果后直接关)可以考虑在交互库加上.out的文件输出

23、矩阵树定理

矩阵树定理求的是:

TeTwe

变元矩阵树定理:
把度数矩阵设成与i相连的边的权值
把邻接矩阵设成边权负值

24、奇知增

devc++里的英文输入法要用"半角"

25、最小割树

先记结论:类似于分治,在当前点集种选择任意两个点作为源点、汇点,跑最小割G

两个点之间连树边,边权为G

把当前点集中和S连通的放进一个集合,和T连通的放进一个集合,分治下去

注意:每次跑最小是在全局跑,有n1次最小割(n1跳边)

建出树之后,任意两点的最小割,就是两点树上路径的边权最小值

posted on   Bwzhh  阅读(223)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示