Loading

题解 [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)\)

posted @ 2023-11-01 21:19  Alan_Zhao_2007  阅读(0)  评论(0)    收藏  举报