集合划分容斥

看上去很强大,但是在算法竞赛中应该不太会涉及,不过非常好玩就是了。

先来理解一下幂级数复合。以集合幂级数为例,我们会将 \(U\) 划分为若干集合,\(S\) 被划分出会带来 \(f_S\) 的系数,一个划分方案的权值就是系数乘积,需要求出所有划分方案权值之和。所求即为 \(\exp f(x)\)。考虑这个复合的意义,\([x^i]\exp f(x)\) 就是划分出 \(i\) 个集合的方案数,其中集合幂级数的乘法需要做无交并卷积,由于无序,所以需要乘上 \(\frac1{i!}\)

考虑如下问题:

给定无向图,求 DAG 定向方案数。

我们的想法是每次加入一层极大的零入度点,但无法很好地保证“极大”这一条件,考虑容斥,设我们有容斥系数 \(H(x)\),这是一个集合幂级数,\([x^S]H(x)\) 代表 \(S\) 的容斥系数。令 \(G(x)=x+x^2+\cdots=\frac1{1-x}-1\),那么答案为 \(G(H(x))\) 的前 \(n\) 项系数,此处加入是关注顺序的。我们暂时无法求出 \(H(x)\),不过可以思考一下我们想让他满足什么条件。

当有一个极大的零入度点集合 \(S\) 时,我们自然想让加入 \(S\) 产生 \(1\) 的系数。考虑这意味着,\([x^S]G(H(x))=1\)。令 \([x^S]F(x)=[S\neq\emptyset]\),那么 \(G(H(x))=F(x)\)!求一下逆可以求出 \(H(x)\)

AGC085D:计数恰有 \(a\)\(A\)\(b\)\(B\)\(c\)\(C\),不存在 \(ABC,BAC,CAB\) 的字符串数量。

首先声称,合法当且仅当将序列划分成若干个极长 \(ABCABC\cdots\) 的连续段,每段长度不超过 \(2\)。考虑连续段长度的生成函数,令 \(G(x)=\frac1{1-x}\)\(F(x)=1+x+x^2\),容斥系数为 \(H(x)\),则 \(G(H(x))=F(x)\)。演示一下解方程:

\[\frac1{1-H(x)}=1+x+x^2 \]

\[H(x)=1-\frac1{1+x+x^2} \]

对系数找规律,发现关于次数模 \(3\) 下循环。考虑如何满足数量限制,显然扩展成三元多项式 ,即 \(A(x,y,z)\)。那么最后求的就是 \([x^ay^bz^c]\frac1{1-A(x,y,z)}\)


对集合划分容斥的本质理解实际上是,对于全集划分成若干个集合,有关于集合自身的系数 \(F(x)\),划分方案的权值是系数乘积。不同大小的划分方案会对答案有贡献,形如 \(G(F(x))\)。但我们无法很好地模拟合法划分,于是考虑容斥,有容斥系数 \(H(x)\),存在关系 \(G(H(x))=F(x)\)

当然两个 \(G\) 也不一定相同,具体情况具体分析。

拯救一下我的睡眠,后面等有缘再写。

posted @ 2025-10-23 22:01  BYR_KKK  阅读(11)  评论(0)    收藏  举报