LGP9896 [ICPC-2018-R QGD] Sub-cycle Graph 学习笔记

LGP9896 [ICPC-2018-R QGD] Sub-cycle Graph 学习笔记

Luogu Link

前言

不会GF。暂时看来组合意义大抵还是能保平安的。

题意简述

我们对于一个 \(n\)\(m\) 边的无向有标号简单图,定义其为“半环图”当且仅当其添加若干条边后整个图可以变为一个 \(n\) 个点的简单环。特别定义一个环也是半环图。

给定 \(n,m\),问有多少这样的半环图。答案对 \(10^9+7\) 取模。

\(n\le 10^5\)

做法解析

“半环图”实际上可以被理解为若干条链。再进一步,这个问题也等价于:求将 \(n\) 个元素划分成 \(n-m\) 个排列的方案数(其中排列可以翻转)。

\(m\ge n\) 时显然答案为 \(0\)\(m=n\) 时显然答案为环排列个数,\(m=0\) 时答案为 \(1\)。然后呢?

你发现,一般而言,长为 \(x\) 的可翻转排列数为 \(\frac{x!}{2}\),但是 \(x=1\) 的时候这式子要特殊处理。而这道题的数据范围又告诉我们,我们基本上只被允许枚举某种 \(O(n)\) 的要素,而显然非单点链条数肯定是小于 \(n\) 的,所以你枚举有多少条非单点链,设有 \(x\) 条。

接下来有两种思维方式。

思路一

第一种,是将所有点分成度数为 \(0\)\(1\)\(2\) 三类来讨论。

度数为 \(1\) 的点(即链的两端)数量为 \(2x\),而总度数为 \(2m\),因此度数为 \(2\) 的点有 \(\frac{2m-2x}{2}=m-x\) 个,剩下 \(n-(m-x)-2x=n-m-x\) 个点即为度数为 \(0\) 的。

我们先给每个点分配一种类型。这里的方案数显然为 \(\binom{n}{2x}\binom{n-2x}{m-x}\)

然后你让每个度数为 \(1\) 的点两两配对。即先选出 \(x\) 个点,让另外 \(x\) 个点全排列。最后因为 \((u,v)\) 同构于 \((v,u)\),所以还要去重,这部分答案为 \(\frac{\binom{2x}{x}x!}{2^x}\)

最后度数为 \(2\) 的点要划分到这些链条里。这部分方案即为先全排列后隔板法。这部分答案为 \((m-x)!\binom{m-x+(x-1)}{x-1}=(m-x)!\binom{m-1}{x-1}\)

综上答案为 \(\sum_{x=1}^{\lfloor\frac{n}{2}\rfloor}\binom{n}{2x}\binom{n-2x}{m-x}\frac{\binom{2x}{x}x!}{2^x}(m-x)!\binom{m-1}{x-1}\)

思路二

第二种,是先思考无标号情况,再拓展到有标号情况。

总体和思路一类似。

代码实现

这题也没必要给代码啊。蒜鸟蒜鸟。

反思总结

长为 \(1\) 的链(即单点)作为排列时,在去重翻转时不需要除以二,所以对单点和非单点链条有时应该分开计数。

posted @ 2025-07-15 10:16  矞龙OrinLoong  阅读(4)  评论(0)    收藏  举报