arc115D odd degree

statement

题意很简洁。

让你对于 \(k\in[1,n]\) 求一个图有多少个子图有恰好 \(k\) 个奇度的点。

\(n,m\leq 5000\)

注意子图特殊定义:原图 \(E\),子图 \(S\)\(E,S\) 点集相同,\(S\) 边集是 \(E\) 边集的子集。


solution

这个题其实和 cf1515G 有异曲同工之妙。

这道题本质让我们决策每一条边选还是不选。

hint1

如果是树怎么办?

key

接下来就是最精妙的地方了!

在树上的时候,只要我们钦定奇度点,我们可以得到唯一边的决策情况。

可以从反证法,如果多一条边,那么必须用一个环来抵消,树中没有环。

若要 \(2\mid k\) 个奇度点,则方案数就为 \(\binom{n}{k}\)


从而可以扩展到平凡图。

我们拉出来一棵生成树,然后我们先决策树边,接下来决策非树边。

现在本质上是对一个树边的决策情况,我们想把若干个环取反使得奇偶状态不变。

这里与 cf1515G 便十分相似,我们认为每一个非树边与树边形成的简单环是所有环的“基环”。

所以只需要随意决策每一个非树边选不选即可。


也可以这么理解无论我们怎么决策非树边 \((x,y)\),都可以通过把 \(x,y\) 间树边取反,使得状态不变。

\(\texttt{Complexity : }\mathcal{O(n\alpha(n)+n^2)}\)

code


arc115D odd degree
https://proton-z.github.io/2021/09/27/arc115d/
作者
Imitators
发布于
2021年9月27日
许可协议