一些知識點的整理

$O(n\log n)$求一般冪多項式的不定和式

即給定多項式$\sum_{k=0}^{n-1}a_kx^k$,求$\sum_{k=0}^{n-1}a_kS_k(x)$的係數。其中$S_k(x)=\sum_{i=0}^{x-1}i^k$。函數

考慮從奇怪的角度出發:優化

$$n^k=k![x^k]e^{nx}$$spa

$$\sum_{i=0}^{n-1}i^k=k![x^k]\Big(\sum_{i=0}^{n-1}e^{ix}\Big)$$對象

其中$\sum_{i=0}^{n-1}e^{ix}$能夠用等比數列求和公式簡化爲$\frac{e^{nx}-1}{e^x-1}$。發現分母和求和指標$i$是無關的,咱們嘗試將其分離。可是因爲$e^x-1$常數項爲$0$沒法直接分離,因此咱們考慮在等式右邊乘以$x$,將$\frac{x}{e^x-1}$分離。即:遞歸

$$\sum_{i=0}^{n-1}i^k=k![x^k]\frac{e^{nx}-1}{e^x-1}$$get

$$\sum_{i=0}^{n-1}i^k=k![x^{k+1}]\frac{x(e^{nx}-1)}{e^x-1}$$基礎

$$\sum_{i=0}^{n-1}i^k=k![x^{k+1}]\bigg(\frac{x}{e^x-1}(e^{nx}-1)\bigg)$$技巧

實際上$\frac{x}{e^x-1}$就是伯努利數的指數生成函數,咱們將其簡記爲$B$。方法

那麼咱們直接展開兩個多項式相乘的係數,能夠獲得:統計

$$\sum_{i=0}^{n-1}i^k=k!\sum_{j=0}^{k+1}B_{k+1-j}x^j$$

$$\sum_{i=0}^{n-1}i^k=k!\sum_{j=1}^{k+1}B_{k+1-j}[x^j]e^{nx}$$

$$\sum_{i=0}^{n-1}i^k=k!\sum_{j=1}^{k+1}B_{k+1-j}\frac{n^j}{j!}$$

因而能夠獲得:

$$\sum_{i=0}^{x-1}i^k=k!\sum_{j=1}^{k+1}B_{k+1-j}\frac{x^j}{j!}$$

回代到原式可得:

$$\sum_{k=0}^{n-1}a_kS_k(x)=\sum_{k=0}^{n-1}a_kk!\Big(\sum_{j=1}^{k+1}B_{k+1-j}\frac{x^j}{j!}\Big)$$

$$=\sum_{j=1}^nx^j\frac{1}{j!}\Big(\sum_{k=j-1}^{n-1}a_kk!B_{k+1-j}\Big)$$

直接進行卷積便可。

板子題:洛谷P3711

點分治中下降複雜度的一種方法

有時點分治的過程要求咱們求出從分治部分的根到重心的信息,若是直接作一般會成爲複雜度瓶頸,使複雜度多一個$\log$之類的。可是考慮到在遞歸至子樹的時候咱們已經作了一部分這樣的問題了,咱們也許能夠利用這些結果來下降複雜度。設重心爲$x$,考慮從重心的父親$y$開始統計,能夠發現$y$到劃分給$y$的連通塊的根$z$的這段路徑已經統計好了,結果直接利用,但此時因爲$z$被$y$遞歸求解了所以$z$自己並無存下更遠的路徑的信息。可是$z$的父親必定是離$y$最近的既是$y$的祖先又是點分樹上$y$的祖先的點,因而它必定統計了更遠的路徑,而且它負責的連通塊$size$至少是$y$的兩倍。因而咱們在目前的基礎上添加$z$到$z$的父親的信息以及$z$的父親到所屬連通塊的根的信息便可。咱們能夠不斷合併這些信息直到到達$x$的根爲止。

詳情能夠見例題UOJ #23,只不過這道題是仙人掌,可能有些醜陋。其實thusc2018有一道更好的題,能夠用點分治加上面的技巧在$O(n\log^2n)$的時間內解決(不用這個方法則是$O(n\log^3n)$的),作到了和標算同樣的複雜度。有興趣的能夠上網搜一搜題目。

最小割的一種建圖方法和我的理解

最小割模型中一條$S\to T$的路徑上的邊可能會被割大於一條的數量,若是想要限制這條路徑最多隻割一條邊,能夠給這條路徑加上容量爲$\infty$的反向弧。

我的感受最小割實際上是在作一種相似$2-SAT$的問題,只不過最小割能夠求出代價最小的一種方案($2-SAT$的代價只能是$\infty$),但不能夠支持兩個條件同時爲真/假時須要付出代價的限制(但若是這類代價只會在兩個不交的集合之間發生顯然能夠黑白染色後再用最小割作)。因此假如你感受題目是在讓你求一個有代價的$2-SAT$問題,而數據範圍又不大的時候,基本能夠往最小割方向想了。

一種吊打(?)cdq分治的離線統計法

cdq分治能夠用於解決一類「貢獻獨立,容許離線」的統計性問題。主要思想是經過對時間分治消除時間的影響,只需靜態的統計前半部分的插入對後半部分詢問的影響就能夠了。不過,對於一樣貢獻獨立,可是容許刪除的問題,cdq分治有時就會失效。可是此時咱們能夠考慮更換一種分組統計的方法,創建時間線段樹。此時一個插入操做對一段區間有效。對於時間線段樹上的每一個節點,咱們靜態統計包含這個區間的全部插入操做對這個區間中的詢問的貢獻。這樣咱們就能夠支持刪除操做,複雜度和cdq分治仍是同樣的。

圖的四元環計數

固然因爲數量不少確定是不能爲所欲爲的計數的。一般四元環的貢獻是邊權的乘積,就以這個爲例。能夠像三元環計數同樣,枚舉全部$x\to y\to z$的路徑。咱們在$z$中記錄當前全部不一樣的$y$的$x\to y\to z$的路徑的權值和,在又一次枚舉到$z$的時候將貢獻相乘統計進答案裏就能夠了。複雜度也是$O(m\sqrt m)$的。

利用四毛子優化常數時間複雜度

有時候咱們對一個對象計算答案的時候須要遞歸到更小的狀況,這樣的複雜度可能稍微超出限制。可是考慮到遞歸至極小的狀況(好比$O(\log n)$的級別)的時候本質不一樣的狀況不會不少,咱們能夠預處理它們以直接得到答案,減小遞歸次數。

一般能夠令複雜度除以$\log$。

相關文章
相關標籤/搜索