如何容斥处理互不相等
问题概述
有这样一类问题:\(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)\)。