Q4.2.2.8. 连边's 题解
格式化题面?
现在有一个 \(n\) 个点 \(m\) 条边的无向图,现在需要你添加 \(k\) 条边,使得每个点的度数为偶数。限制:新添加的边之间互不为重边,不允许自环。点与点之间不同。
范围: \(n \le 1000\), \(m \le n\), \(k \le \min\{\frac{n(n-1)}{2},1000\}\)
算法筛选
抓取关键词:题目要求我们求出满足每个点都满足度数为偶数的条件(好似病句?),经过简单思考后发现并不好直接求导,所以考虑容斥原理(因为容斥原理擅长求导满足子问题的答案或是至少、至多满足条件的个数)。设 \(f_{i,j}\) 表示为添加了 \(i\) 条边后,度数为奇数的点的个数为 \(j\) 个的方案数。
实现算法
根据 \(\text{DP}\) 定义,思考添加一条边会对一个图有什么影响。最后分一下三种情况:
- 奇度点连奇度点,减少了 \(2\) 个奇度点,连边方案为: \(C_{j+2}^2\)
- 偶度点连偶度点,增多了 \(2\) 个奇度点,连边方案为: \(C_{n-j+2}^2\)
- 奇度点连偶度点,奇度点的个数不变,连边方案为: \(j \times (n-j)\)
最后,将这三种情况加起来,就会得到一个有重边的方案数。考虑重边是在哪一条边重了,不难想到应该就是在 \(i-2\) 时可能选到的边有可能在未来会成为重边候选者。所以,将上述三种情况加起来减去重边方案数,就会得到一个连边顺序有顺序的方案数,但显然答案是不允许有顺序的,所以对于最终答案要除以 \(i\) 。
最终答案: \(f_{k,0}\)
边界:设一开始点的度数为奇数的点的数量为 \(S\),则有 \(f_{0,S}=1\)
时空复杂度: \(\Theta(NK)\)

浙公网安备 33010602011771号