题解:CF2172N New Kingdom
题目大意
给定三个整数
解法
这道题思考起来并不困难,但是存在一定数量的 corner case,一般可以通过跑出较小范围的所有数据来进行调试。
首先,因为总度数为
有
同时,当
Part 1(k=0 )
缩点后得到的树,其叶子节点的度数必为奇数,其在原图中对应的一个边双至少存在一个点度数为奇数。
所以,当
- 当
n=1 时,只有一个点,不需要连边。 - 当
n=2 时,必须连成一个边双,如上面所说,必须有边(1,2) 和(2,1) ,此时出现重边,所以无解。 - 当
n\ge 3 时,只需要用n-1 条边将所有点连成一个环即可。
Part 2(b=0 )
此时只有一个边双,可以用
接下来,我们考虑构造出
- 选择环上
\frac{k}{2} 对互不同相同的点对,对每个点对内连边,可以产生k 个度数为奇数的点。
注意,当
Part 3(b+1>k )
此时是边双个数比度数为奇数的点的个数多的情况。
我们可以采取这样的构造方式:
如上图(
- 红色部分,我们通过构造一个菊花来满足有
k 个奇数点的限制。 - 橙色部分,我们通过构造一条链来满足多余的边双的限制。
- 黄色部分,仅通过前面两个部分我们可能无法将
n 个点全部用完,所以我们可以通过构造一个环来将剩下的点用完。
Part 4(b+1=k )
此时,相较于
Part 5(b+1<k )
此时,我们能够使用的边双的数量要少于奇数点的个数,也就是说,我们需要使用 Part 2 的做法在边双内构造出若干度数为奇数的点。
我们希望每个边双的环尽可能大,这样才能构造出尽可能多的度数为奇数的点。贪心的考虑,我们使用 Part 4 中的做法,即构造一个边双,上面连
如图(
我们只需要在大环中连
注意一个特殊情况:大环中包含
首先,当
- 构造一个包含节点
1,2,3 的环。 - 在
2,3 上分别连接一个节点,在1 上连接剩下n-5 个节点即可。
以上,我们的构造方案边数不超过