快一個月不更博的時候氵一篇博客
分治
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都有過被卡的經歷。。。