[JZOJ3303][BZOJ3456] 城市規劃【多項式】【生成函式】【未完成】
Description
剛剛解決完電力網路的問題, 阿狸又被領導的任務給難住了.
剛才說過, 阿狸的國家有n 個城市, 現在國家需要在某些城市對之間建立一些貿易路線, 使得整個國家的任意兩個城市都直接或間接的連通.
為了省錢, 每兩個城市之間最多隻能有一條直接的貿易路徑. 對於兩個建立路線的方案, 如果存在一個城市對, 在兩個方案中是否建立路線不一樣, 那麼這兩個方案就是不同的, 否則就是相同的. 現在你需要求出一共有多少不同的方案.
好了, 這就是困擾阿狸的問題. 換句話說, 你需要求出n 個點的簡單(無重邊無自環)無向連通圖數目.
由於這個數字可能非常大, 你只需要輸出方案數mod 1004535809(479 * 2 ^21 + 1)即可.
n<=130000
Solution
我們有兩種思路
一是考慮DP
設
為i個點的無向連通圖個數,
為i個點的無向圖個數
顯然
(每條邊有或沒有)
正難則反,我們可以考慮用總的減去不連通的
不妨列舉某一個點所在的聯通塊的大小(為了避免重複,我們當做列舉的點是標號最小的那個)
那麼
列舉1號點所在連通塊大小,組合數計算其中點的情況,剩下i-j個點隨便組成一個無向圖
這一定唯一對應了一種不合法情況
直接轉移複雜度是不能接受的,考慮優化
看到
我們容易想到卷積
組合數拆開
分配一下,(i-1)除過來
此時可以考慮用CDQ分治
對於分治區間
,遞迴計算
,然後用NTT快速計算出
對
的貢獻,然後遞迴右邊即可
複雜度
然而這不是重點
如果我們移項,將左邊的併入右邊卷積式子,就有
如果我們將上面三部分分別看成三個多項式
容易看出