前传。
一年之期已到!尝试总结总结用 gf 凑容斥系数的思路,但是感觉有点脑子能理解但嘴说不出来什么道理。
经典例题:20210620省队互测-qwaszx T2,jiangly 的排列数数题,P7275 计树
一个组合对象由若干元素组成,但是元素直接可能可以合并,不能任意拼接。先假设可以任意拼接,然后对系数分配适当的容斥系数(此时一个方案的贡献要乘上所有元素的容斥系数的乘积)使得每个大小的元素被任意拼接合并出来的系数乘积之和恰好是我们想要它贡献的。
duye 如是说:我们无法直接计算满足某种条件的方案数,但可以计算另一些与原条件相关的条件的方案数,然后对每种情况赋予一个容斥系数,使得满足原条件的每种情况对应的容斥系数之和恰为 ,不满足的情况对应的容斥系数之和恰为 .
以 20210620省队互测-qwaszx T2 为例,如果可以任意拼接,先不考虑段之间的编号分配,仅考虑段内部是上升还是下降带来的方案数,那就是 ,.然后 就是答案的 ogf.但是段和段之间可能可以合并,需要给 的每一项系数乘一个适当的容斥系数,满足这个容斥系数任意拼接得到的是 ,假设容斥系数的 ogf 是 ,那么这里就有 ,解得 ,和 点乘得到 ,那么 就是答案。
最开始的三个例子都是形式幂级数的 SEQ 构造。对于 DAG 计数问题的 容斥系数也可以用类似的思路推导。
这里采用集合幂级数,乘法定义为不交并卷积(子集卷积),乘法逆同理。每次将入度为 的所有点在图中删去,并且记做一个新的多重集。这样就能把 DAG 转化成若干多重集。比较简单的想法是 ,但是会有计重情况,依然考虑去分配容斥系数使得不会计重。用集合幂级数列出来就是 (这里集合幂级数的 Sequence 构造依然是 )。那么 ,手动集合幂级数求逆(分母乘到前面之后提取系数)可以解得 .现在转移式变成 .
在这里看一下我们到底做了什么事,对于一个 DAG 对应的多重集序列 ,考虑它被算了多少次将每个 贡献乘起来即可。一个 的贡献就是将其分裂成若干集合 ,dp 将这些 拼起来时每一步乘上的 种就有一种方案对应的是这个 DAG 的连边,而容斥系数决定了这个 的所有划分的权值和就是 (一个划分的权值定义为分裂出的所有集合的容斥系数之积)。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
2022-09-17 组合意义
2022-09-17 「题解」ARC096E Everything on It