题解 CF1221G Graph And Numbers

\(\texttt{link}\)

题意

给一个 \(n\) 个点 \(m\) 条边的无向图,要求对每个点赋权值为 \(0\)\(1\),每条边的边权为其两个端点权值和。

一种赋权方案合法当且仅当边权为 \(0\),边权为 \(1\),边权为 \(2\) 的边均存在。求合法的方案数。

\(1\le n\le 40,0\le m\le \frac{n(n-1)}{2}\)

题解

特判 \(m=0\)

把所有未连边的点删掉,它们可以任意取,若有 \(c\) 个这样的点,答案乘上 \(2^{c}\) 即可,以下的 \(n\)\(n-c\)

容斥一下,令 \(f_{S}\) 表示保证 \(S\) 中的边权不存在的方案,则 \(ans=\sum\limits_{S\in\{0,1,2\}}(-1)^{\left\vert S\right\vert}f(S)\),依次处理即可。

发现不同连通块应该分开考虑,记 \(p\) 为连通块个数。

\(f(\varnothing)\):显然 \(f(\varnothing)=2^n\)

\(f(\{0\})\):整道题的核心。即不存在某条边两端点权均为 \(0\)

\(n\le 20\) 可以直接 \(O(2^n m)\) 判断,现在是 \(n\le 40\),启发我们 meet-in-the-middle。

\(m\) 个点划分为两个点集,将前 \(B\) 个点暴力枚举出 \(2^B\) 种情况,判断前 \(B\) 个点内部的边是否合法,令 \(g_{S}\) 表示前 \(B\) 个点钦定选 \(0\) 的点集为 \(S\) 是否合法,若合法则 \(g_S=1\),否则 \(g_{S}=0\)

\(n-B\) 个点同样枚举 \(2^{n-B}\) 种情况并判断后 \(n-B\) 个点内部的边是否合法,若合法,则考虑连接两个点集的边,在前 \(B\) 个点中会有若干个点被钦定不能选 \(0\),设这些点组成的集合为 \(T\),则这种情况对应前 \(B\) 个点的方案数有 \(\sum\limits_{S\in \complement_{U} T}g_S\),对 \(g\) 做子集求和,FWT 即可。

\(f(\{1\})\):即不存在某条边两端点权不同,所以一个连通块内每个点权值相等,故 \(f(\{1\})=2^p\)

\(f(\{2\})\):与 \(f(\{0\})\) 对称。

\(f(\{0,1\})\):即不存在权值为 \(0\) 的点,只能全部赋 \(1\)\(f(\{0,1\})=1\)

\(f(\{0,2\})\):即不存在某条边两端点权相同,判断每个连通块是否是二分图即可,每个二分图左右部点互换是 \(2\) 种方案。若每个连通块都是二分图,则 \(f(\{0,2\})=2^p\),否则 \(f(\{0,2\})=0\)

\(f(\{1,2\})\):与 \(f(\{0,1\})\) 对称。

\(f(\{0,1,2\})\):显然 \(f(\{0,1,2\})=0\)

\(B=\frac{n}{2}\),时间复杂度为 \(O(2^{\frac{n}{2}}m)\)

posted @ 2024-02-27 20:41  Terac  阅读(13)  评论(0)    收藏  举报