1. 程式人生 > >【生成函式+計數】LOJ6389 [THUPC2018] 好圖計數

【生成函式+計數】LOJ6389 [THUPC2018] 好圖計數

【題目】
原題地址
定義 G G 的補圖與 G G 有完全相同的節點,任意兩點之間有邊當且僅當他們在 G

G 中不相鄰
定義一個無向簡單圖是好的滿足:一個單點是好的,若干個好的圖分別作為連通塊所形成的圖是好的,一個好的圖的補圖是好的。
給定一個整數 n n ,求 n n
個節點的本質不同的好圖數量, n 23333 n\leq 23333

【解題思路】
以下多數參考這裡,有部分補充修改。

這個題和無標號生成樹計數類似
n

n 個點的好圖數目為 f n f_n ,其中連通圖的數目為 g n g_n ,那麼顯然當 n 2 n\geq 2 ,連通好圖與不連通好圖是一一對應的,也就是 f n = 2 g n f_n=2g_n
考慮 f f 的生成函式 F ( x ) = f i x i F(x)=\sum f_ix^i ,為了方便,設 f 0 = 1 f_0=1
首先一個好圖由若干個連通好圖組成,於是我們考慮列舉每個連通好圖的貢獻,那麼一種大小為 k k 的連通好圖的貢獻是 i 0 x k i \sum_{i\geq 0} x^{ki} ,因此我們有:
F ( x ) = k > 0 ( i 0 x i k ) g k = k > 0 ( 1 x k ) g k F(x)=\prod_{k>0}(\sum_{i\geq 0}x^{ik})^{g_k}=\prod_{k>0}(1-x^k)^{-g_k}
然後對兩邊同時取 l n ln
ln ( F ( x ) ) = k > 0 g k ln ( 1 x k ) \ln(F(x))=-\sum_{k>0} g_k\ln(1-x^k)
再求導:
F ( x ) F ( x ) = k > 0 g k k x k 1 1 x k \frac {F'(x)} {F(x)}=\sum_{k>0}g_k\frac {kx^{k-1}} {1-x^k}
然後拆回去每一項:
[ x n ] F ( x ) = ( n + 1 ) f n + 1 = i = 0 n f i ( [ x n i ] k > 0 k g k x k 1 1 x k ) [x^n]F(x)=(n+1)f_{n+1}=\sum\limits_{i=0}^nf_i([x^{n-i}]\sum\limits_{k>0}kg_k\frac{x^{k-1}}{1-x^k})
這裡注意到 x k 1 1 x k = i > 0 x i k 1 \frac{x^{k-1}}{1-x^k}=\sum_{i>0}x^{ik-1} ,則 [ x n ] x k 1 1 x k = [ k n + 1 ] [x^n]\frac{x^{k-1}}{1-x^k}=[k|n+1] ,因此
( n + 1 ) f n + 1 = i = 0 n f i k n + 1 i k g k (n+1)f_{n+1}=\sum_{i=0}^nf_i\sum_{k|n+1-i}kg_k