多项式计数相关
放假太闲了,也没啥游戏可玩,于是学学科技
前言
本博客直接嗯看的话一开始跨度会比较大,因此不建议没有了解过以下内容的人观看。
- 多项式以及多项式的一些初等函数
- 生成函数的简单了解,包括 OGF 和 EGF(仅限了解即可)
- 组合数学
指数生成函数 exp 的组合意义
我们考虑下面这个问题:
有
个不同的小球放入 个互不区分的盒子中的方案数 个不同的小球放入任意个互不区分的盒子中的方案数
我们设第一个问题的答案为
我们设
多项式快速幂即可解决。
而对于第二个问题,我们只需要枚举有多少个盒子即可。我们就可以写出下面的式子:
根据
出奇的简洁,对吧。这也就是指数生成函数
如果上面这些话比较抽象,可以参照下面的两个个例子来理解:
- 有标号的小球放到一个盒子是集合,它能够通过
来转化为放到一堆盒子中的情况。 - 有标号的点形成连通块是集合,它能够转化为一堆连通块,也就是普通图。
欧拉变换
再回到小球和盒子上来,我们还可以解决下面这几个问题:
- 我们认为盒子有序,那么我们前面就不用除去
,那么 。 - 无标号小球放入有标号盒子,那么只需要把前面的 EGF 换为 OGF 即可。
我们需要解决的问题主要在下一种:无标号小球放入无标号盒子。我们设生成函数
我们考虑把它化简一下,化简的具体过程可以参考我的十二重计数法博客,下面过程可能会略微省略。
这样就得到了欧拉变换的最终式子,欧拉变换的组合意义和
一些题目
限于作者能力和精力有限,只能找一些板题来当例题了。
集合划分计数
一个有
数据范围:
和上面第一个提到的例子相同,只不过为
城市规划
求
数据范围:
在计数杂题中,我们已经介绍了基于 DP 的分治 FFT 做法,这里我们再介绍基于
我们考虑一张简单无向图是如何组成的:是由一堆有标号点构成的连通块组成的。我们把上面的例子套到这里:小球即为有标号点,盒子即为连通块。只不过这里小球放入一个盒子中的方案数不为
多项式
有标号 DAG 计数
对
数据范围:
设
我们考虑模拟拓扑排序的过程,我们删去图中的
注意这里我们乘了一个
首先这个
我们就能得到这个式子:
我们得到了普通 DAG 的答案,我们考虑弱连通 DAG。一个普通 DAG 一定是由一堆弱连通的 DAG 构成,因此它也符合我们
无标号无根树计数
求
数据范围:
本题是无标号问题,因此我们需要用上面提到的欧拉变换来解决。
我们先考虑有根树。我们把根去掉后,会形成一堆小的无标号有根树。如果我们把一棵树看作一个集合,那么这一堆树就是生成集族。通过比较系数我们就可以用欧拉变换列出下面的式子:
这么简洁的式子不出意料的难解决。我们考虑对两边求导。
我们发现右边这个
因此所有对
我们再把
分治 FFT 即可。注意这里的分治 FFT 和 luogu 上的板子题不太一样,
当
当
这样我们就求出了有根树的数量,我们再考虑无根树的数量,我们只需要给它定个根:重心。减去不合法的(子树大小大于
但是我们考虑偶数个点可能会有两个重心,因此我们需要再减去当这两颗大小相同的树同构的情况,也就是
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人