题解 [IOI 2023 集训队互测 Day8] 环覆盖
题意
给定一张 \(n\) 个点,\(m\) 条边的简单无向图,对每个 \(i\in [0,m]\cap \mathbb{Z}\),计算只保留图中的 \(i\) 条边,使得每个点的度数都是偶数的方案数,答案对 \(10^9+7\) 取模。
\(n\le 25\)。
题解
答案的生成函数就是
\[[x^\varnothing]\prod_{i=1}^m (1+x^{\{u_i,v_i\}}y).
\]
其中 \(x\) 一维是集合幂级数。
考虑 \([x^S]\operatorname{FWT}(1+x^{\{u_i,v_i\}}y)\),它应当等于 \(1+(-1)^{|S\cap \{u_i,v_i\}|}y\)。所以答案的 \(\operatorname{FWT}\) 中的 \(x^S\) 项系数是 \((1-y)^{c(S)}(1+y)^{m-c(S)}\),\(c(S)\) 是有恰好一个端点在 \(S\) 内的边的个数。
我们知道 FWT 的逆变换是
\[[x^S]\operatorname{IFWT}(F)=\frac{1}{2^n}\sum_{T\subseteq [n]} (-1)^{|S\cap T|} [x^T]F.
\]
由于我们只需要求 \(x^\varnothing\) 项系数,所以需要求的其实是
\[\frac{1}{2^n}\sum_{S\subseteq [n]} (1-y)^{c(S)}(1+y)^{m-c(S)}.
\]
当我们在 \(S\) 中加入或删除一个元素时,\(c(S)\) 的变化可以 \(O(1)\) 维护。预处理所有 \((1-y)^i(1+y)^{m-i}\),总的时间复杂度是 \(O(2^n+m^3)\)。
Written by Alan_Zhao

浙公网安备 33010602011771号