多项式杂题

多项式特训。开始大生产运动。不得不说黑题通过数一下就上来了。

由于大多数比较工业所以一律不放代码。

歌被咕了,打算报复性整点活。整活其实不一定需要整活用的曲。

目前打算是放点“确实有歌词”的,现在备选歌单:

  1. Credits EX
  2. Duplicity Shade
  3. Random ("Take #8" Full Version)
  4. 脑力
  5. Viyella's Memory

P7435 简单的排列计数

先来点比较清新的水一下。然而太久不做多项式题了码的时候出了很大的锅。

首先一个显然的 dp:从小到大插入数,设 dpi,j 为插入 ij 个逆序对的答案,那么

dpi,j=k=0i1dpi1,jkik

然后你发现这玩意不就是

i=1nfi

其中

fi=n=0i1inxn=1(ix)i1ix

那么套路 lnexp 一下。

分子:

i=1nln(1(ix)i)=i=1nj=1(ix)ijj

O(min(n,k)logk)

分母:

i=1nln(1ix)=i=1nj=1(ix)jj=j=1xjji=1nij=j=1xjj(j+1)i=0j(j+1i)Bi(n+1)ji+1=j=1xjj(j+1)(Bj+1+(j+1)!i=0j+1Bii!(n+1)j+1i(j+1i)!)

爆算就行了。提醒忘了的同学伯努利数的 EGF 是 xex1

然后是我太久不写多项式题了导致写的时候出现的一些锅:

  1. 提取 EGF 系数没乘阶乘。
  2. 经典数组不清空。
  3. ln 把负号吃了。
  4. 注意分子第一个上界是 min(n,k)

P2767 树的数量

早就写了,然而现在水一下博。

容易得到答案的生成函数

F=x(1+F)m

那拉格朗日反演

[xn]F=1n[xn1](1+x)nm=(nmn1)n

写 lucas。

P5219 无聊的水题 I

我们知道这玩意可以变成 Prufer 序列。那么就是 n2 长度值域 n 出现次数最多元素出现 m 次的序列个数。容斥一下变成出现次数不超过 m 次,那这玩意显然是

(n2)![xn2](i=0m1xii!)n

我这一版的求逆没有清空调了半天。日。

P5900 无标号无根树计数

我以为难度全都在代码。

首先套路考虑有根树然后把根不是中心的砍掉。钦定一个根,剩下的就是个 MSET。所以

F(x)=xexpi=1F(xi)i

现在的问题是怎么算这个东西。一个 trivial 的想法是套个牛顿迭代上去。

F(x)=xexpi=1F(xi)iF(x)x=expi=1F(xi)ilnF(x)x=i=1F(xi)ilnF(x)xF(x)G=0

其中 G=i=2F(xi)i。于是有牛顿迭代式子:

F=F0lnF0xF0G1F01

实际上似乎不是想象中那么难写。

然后考虑怎么统计答案。首先如果根不是重心,那么肯定有一个儿子大于 n2,枚举这个儿子大小算就行了。另外,如果 n 是偶数,那么 n2 被算了两次,要减掉一次。

loj6538. 烷基计数 加强版 加强版

曾经记得写过某篇题解说过这玩意的生成函数就是

F=xMSET3(F)+1=xF(x)3+3F(x)F(x2)+2F(x3)6+1

牛顿迭代。式子是:

F(x)=F0(x)=x(F0(x)3+3F0(x)F0(x2)+2F0(x3))6F0(x)+63x(F0(x)2+F0(x2))6

P6597 烯烃计数

把碳碳双键拆开变成两个根不超过 2 个儿子,其他节点不超过 3 个儿子的无标号有根树计数。那你一棵树就是两个烷基计数合起来,就是

G(x)=xMSET2(F)+1=xF(x)2+F(x2)2+1

碳碳双键相当于把两个拼一块,再套一个 MSET

H(x)=x(G(x)1)2+G(x2)12

我发现我写代码的时候老是把 F(x2) 写成 F(x)

P6598 烷烃计数

首先无根树先看成有根树。然后就是根节点做个 MSET4。式子好长。

G(x)=xF(x)4+6F(x)2F(x2)+3F(x2)2+8F(x)F(x3)+6F(x4)24

去重采用和无标号无根树计数相同的策略即可。

看了看题解似乎有更加高妙的方法。刚才是钦定一个根的情况,设为 p。然后我们再枚举钦定一条边的情况,把两边拼起来(就是套个 MSET2),记为 q,设 s=1 当且仅当有两个重心且等价,显然是把 F(x) 复读一遍,即 F(x2)。那么我们的答案就是 pq+s

正确性考虑除重心外的点和其父亲边的贡献。若两个点等价,则其父亲边也等价,可以减掉。而重心不可能和其父亲边等价。而当有两个重心的时候,我们在重心等价时加上了 s 即可保证不漏掉。以上是 loj6512. 「雅礼集训 2018 Day8」C 的正解。

P4233 射命丸文的笔记

假期望。

先考虑哈密顿回路个数。n 个节点一个环排列然后剩下的边随便定向,方案显然 (n1)!2(n2)n。然后考虑分母。就是强连通竞赛图个数。

考虑使用普通竞赛图表示强连通竞赛图。普通的显然是 2(n2)

发现竞赛图由于每两个点之间都有连边所以拓扑序唯一。那么强连通缩点之后就是一串强连通竞赛图排一排。也就是 Sequence 构造。那么我们设普通竞赛图为 G ,强连通为 F,则有

G=SEQ(F)=11F

F=11G

完事。

tmd 我为什么 EGF 又忘乘阶乘。

P6295 有标号 DAG 计数

似乎 WC2019 中提到所谓“组合生成函数”用来计数带标号有向图,但是似乎泛用性并不高的样子。那就不管这个了。

考虑先求出任意的 DAG 然后给个 ln

像树枚举根,对于 DAG 我们枚举有几个源点。

fnn 个点的方案数。那么枚举 k 个源点向剩下的点任意连边,方案数显然

k=1n(nk)2n(nk)fnk

显然会算重,想都不用想。经典容斥可以得到

fn=k=1n(nk)(1)k+12n(nk)fnk

看着像卷积。但是得先搞明白组合数和 2n(nk)。组合数可以使用二项卷积的套路。对于后边这个东西,我们在 Chirp-Z Transform 里边见过:

n(nk)=(n2)(k2)(nk2)

那就没了。设 gi=(1)i+1xii!2(i2),那么显然 F(x)=F(x)G(x)+1。求个逆再取 ln 就行了。

今天先这样。去贺一份有标号荒漠计数的线性做法。

posted @   gtm1514  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示