BZOJ 3456: 城市规划(dp+多项式求逆)
傳送門
解題思路
這道題就是求帶標號的無向連通圖個數(shù),首先考慮\(O(n^2)\)的做法,設(shè)\(f_i\)表示有\(i\)個節(jié)點的無向連通圖個數(shù),那么考慮容斥,先把所有的無向圖求出,即為\(2^{C(n,2)}\),再減去不聯(lián)通的情況,而計算不聯(lián)通情況時可以枚舉\(1\)號點這個聯(lián)通塊的大小,就有方程
\[f_i=2^{C_i^2}-\sum\limits_{j=1}^{i-1}C_{i-1}^{j-1}2^{C^2_{i-j}}f_j\]
發(fā)現(xiàn)這樣的時間復雜度為\(O(n^2)\)的,無法通過本題。考慮優(yōu)化,我們設(shè)法把左右兩邊的\(f\)合并,可以給式子同時除一個\((i-1)!\),可得
\[\frac{f_i}{(i-1)!}=\frac{2^{C_i^2}}{(i-1)!}-\sum\limits_{j=1}^{i-1}\frac{2^{C^2_{i-j}}f_j}{(j-1)!(i-j)!}\]
發(fā)現(xiàn)右邊假設(shè)\(j\)枚舉到\(i\)正好是左邊,那么就移項。
\[\sum\limits_{j=1}^i\frac{C^{2}_{i-j}f_j}{(j-1)!(i-j)!}=\frac{2^{C_i^2}}{(i-1)!}\]
右邊是卷積的形式
\[\sum\limits_{j=1}^i\frac{f_j}{(j-1)!}*\frac{2^{C^2_{i-j}}}{(i-j)!}=\frac{2^{C^2_i}}{(i-1)!}\]
設(shè)\(A=\sum\limits_{i=1}^n\dfrac{f_i}{(i-1)!}x^i\),\(B=\sum\limits_{i=0}^{n-1}\dfrac{2^{C_i^2}}{i!}x^i\),\(C=\sum\limits_{i=1}^n\dfrac{2^{C_i^2}}{(i-1)!}x^i\),則
\[A*B=C\]
\[A=C*B^{-1}\]
多項式求逆即可,時間復雜度\(O(nlogn)\)
轉(zhuǎn)載于:https://www.cnblogs.com/sdfzsyq/p/10432954.html
總結(jié)
以上是生活随笔為你收集整理的BZOJ 3456: 城市规划(dp+多项式求逆)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++ 遍历所有点且距离最短_编程小白暑
- 下一篇: 零基础入门stm32需要学这些东西