4.13 閒話

Nityacke發表於2024-04-13

TopCoder13696 Morphling

前置知識:泰勒展開,符號化方法,無標號無根樹計數

我們考慮我們目前序列為 \(a\),然後從每個 \(i\to a_i\) 連邊,得到一顆基環樹。

我們考慮一次 \((x,y)\) 的影響,原本連向 \(x\) 的邊連向了 \(y\),原本連向 \(y\) 的邊連向了 \(x\),而 \(x,y\) 連向的邊互換了,我們可以看成交換了 \(x,y\) 兩個節點的編號。

那麼我們實際上就要對入度小於等於 \(k\) 的無標號基環樹森林計數。

我們把它分成三個部分環上每個點的子樹,環的方案樹,基環樹森林。

首先我們考慮計數每個兒子個數不超過 \(k\),根節點兒子個數不超過 \(k-1\) 的無根樹計數。

我們考慮無標號無根樹計數我們怎麼做的,我們考慮設其生成函式為 \(F(z)\),則我們得到:

\[F(z)=zMSET(F(z))= z\mathcal E(F(z)) \]

\[\begin{aligned} MSET(F(z))&=\mathcal E(F(z))\\ &=\prod_{n\ge 0}\frac 1 {1-z^{\alpha_n}}\\ &=\prod_{n\ge 0}\frac 1 {(1-z^n)^{f_n}}\\ \ln \mathcal E(F(z))&=\sum_{n\ge 0}-f_n\ln(1-z^n)\\ &=\sum_{n\ge 0}f_n\sum_{j\ge 1}\frac {z^{jn}}j\\ &=\sum_{j\ge 0}\frac 1 j\sum_{n\ge 0}f_n(z^j)^n\\ &=\sum_{j\ge 0}\frac {F(z^j)}j\\ \mathcal E(F(z))&=\exp (\sum_{j\ge 0}\frac {F(z^j)}j) \end{aligned} \]

然後我們考慮加入兒子個數的限制,我們增加一個元 \(y\)

\[\begin{aligned} MSET(F(z))&=\prod_{n\ge 0}\frac 1 {1-z^{\alpha_n}y}\\ &=\prod_{n\ge 0}\frac 1 {(1-z^ny)^{f_n}} \end{aligned} \]

首先這個似乎可以求偏導後遞推,但是我們考慮另外一種做法。

我們考慮從小到大處理 \(f_i\),每次知道 \(f_{1\sim i-1}\) 後我們能計算出 \(f_i\)

然後我們考慮計算複雜度, \(z\) 次數不超過 \(n\)\(y\) 度數不超過 \(k\),然後我們可以暴力二維卷積,時間複雜度 \(O(nk\times \sum_{i=1}^n\frac n i)=O(n^2k\ln n)\)

然後我們考慮得到一顆子樹的生成函式後環上怎麼做,我們發現就是一個 CYC 構造即可。

此時我們已經得到了一棵基環樹的生成函式,我們考慮如何擴充到森林,由於 \(MSET(F)\) 的組合意義,我們知道,我們對得到的 \(F\) 進行尤拉變換就能得到最後的答案。

相關文章