无聊的时候氵一些小套路
快一个月不更博的时候氵一篇博客
分治
https://www.cnblogs.com/flashhu/p/9874012.html
图论
边数小于点数的无向连通图是一棵树nmdwsmduliuyyb
所有简单环都是奇环的图是仙人掌。
竞赛图缩点之后是一条链。
(边权都是\(1\))任意两点间最大流不超过\(x\)的图可以划分为不超过\(x\)个生成森林。
看到平面图(包括网格图)的时候想一想对偶图转化。
费用流增广的时候,每一次做完之后的费用和是一个凸函数,可以利用这个性质做一些二分之类的事情。模拟费用流类问题的贪心正确性也可以尝试着从费用流模型推导过来。
Dilworth定理
最长反链长度=最小链覆盖数
涉及很多概念,看这个博客
MST
一张图的所有可能的MST中,每一种边权的数量都分别是一样的;
Kruskal加边的时候,对于同样边权的边,无论它们中间以什么顺序加边,最后的连通性都是一样的。
MST有不少性质,在某些题里面,可以巧妙地对边重赋权、更改端点等而不影响MST,最后更方便的求解答案。
数学
Stirling数
第一类Stirling数可以用一个卷积表示,$$s(n,m)=x^m$$
对于给定\(n\)求所有\(s(n,m)\)的朴素方法是分治FFT,但这个式子可以通过倍增\(O(n\log n)\)求出。
假设我们求出了\(F_t(x)=\prod_{i=1}^n(x+i)\),现在要求\(F_{t+1}(x)=\prod_{i=1}^{2n}(x+i)\),我们有
两遍FFT就出来了。
关于幂、组合数和第二类Stirling数的两个很常用的式子,似乎有着美妙的联系
\(m^n=\sum\limits_{i=1}^mi!S(n,i)C(m,i)\)
\(S(n,m)=\frac1{m!}\sum\limits_{i=1}^m(-1)^{m-i}C(m,m-i)i^n\)
因为幂(\(m^n\))的组合意义就是\(n\)个有标号球放到\(m\)个有标号盒子的方案数,Stirling数是放到无标号盒子且盒子非空的方案数,所以就可以用组合意义解释第一个式子:
球有序盒有序允许空盒的方案数,等于枚举非空盒的个数\(i\),将盒无序的方案数乘上阶乘使其有序,再乘上从所有盒中选出这\(i\)个的组合数(或者直接说是排列数也行)。
第二个式子似乎就是倒着考虑这个组合意义,每次从允许空盒方案中减去有盒为空的方案数,再除掉阶乘使其无序。
这样联系起来似乎好记多了。
计数
Matrix-Tree定理
无向图:求的是图的生成树个数。
度数矩阵-邻接矩阵,即对于边\((u,v)\),++a[u][u],++a[v][v],--a[u][v],--a[v][u]
。
任意消去一行一列求一个代数余子式的值。
有向图:求的是树形图个数,需要区分外向树和内向树。
内向树是入度矩阵-邻接矩阵,即++a[u][u],--a[u][v]
,外向树把边反过来就行了。
消去第\(i\)行第\(i\)列可以求出以\(i\)为根的树形图个数。
字符串
一些性质
KMP的next和回文树的fail都可以划分成\(\log\)段等差数列。
SA
用二哈求SA的时候请使用stable_sort
。
蒟蒻猜测sort
的底层实现主要是快速排序,stable_sort
主要是归并排序。
基于猜测,它相比sort
有两倍的空间占用,但比较次数少。在比较为算法复杂度瓶颈时常数小了一大截。窝和Cgod都有过被卡的经历。。。