如何容斥处理互不相等

问题概述

有这样一类问题:\(n\) 个数 \(a_1,a_2,\ldots a_n\),其中 \(a_i\) 可以是集合 \(s_i\) 中的任一整数。

要求 \(a_1,a_2,\ldots a_n\) 互不相等,问方案数。

Sol

枚举钦定二元组集合 \(E\) 中的相等关系都被满足,容斥系数为 \((-1)^{|E|}\)

\(C(E)\) 表示这张图连上 \(E\) 内的边后所形成的集合划分,正确的式子应该是这样:

\[\begin{aligned} &\sum_{E\in U\times U}(-1)^{|E|} f(E)\\ =&\sum_{E\in U\times U}(-1)^{|E|} \prod_{S\in C(E)}f(S)\\ =&\sum_{P}\left(\prod_{S\in P}f(S)\right)\left(\sum_{C(E)=P}(-1)^{|E|}\right) \end{aligned} \]

后面一半显然对每个 \(S\) 独立,也就是它会等于每个 \(S\) 的容斥系数 \(h(S)\) 的乘积,\(h(S)\) 的意义便是,对于将 \(S\) 内的点连成一个连通块的边集 \(E\)\((-1)^{|E|}\) 的和。

联通就斯特林反演去掉限制,我们尝试求一堆点随便连边时 \((-1)^{|E|}\) 的和。而只有一个孤点的情况贡献会是 \(1\),其他的图我可以以异或 \((1,2)\) 这条边两两配对,贡献为 \(0\)。那么有贡献的划分方案只有不连边,得 \(h(S)=(-1)^{|S|-1}(|S|-1)!\),至此有:

\[ANS=\sum_{P}\prod_{S\in P}f(S)(-1)^{|S|-1}(|S|-1)! \]

转移时枚举未被划分的最小元素所在的子集 \(O(3^n)\);子集卷积 exp 优化 \(O(n^22^n)\)

posted @ 2022-08-11 23:13  Ilith  阅读(356)  评论(8编辑  收藏  举报