昨晚的problem e 一直wa。因为答案,不唯一,调起来只能肉眼debug。被干emo了qwq。好在赛后看到 ugly2333的 思路和我差不多,最后还是要选取度数较小的最优,
好像从度数的角度出发,不容易wa。
题意:
给你一个图,用矩阵表示。
问是否可以翻转一些行的状态,使得图连通。
思路:
- 我们先利用并查集,求出所有连通块
- 发现所有连通块之间都没有边。
case 1
连通块数为1,直接输出0即可(因为已经连通
case 2
假如有一个连通块不是完全图,那么我们可以对这个连通块中的一个点操作,之后就可以使得连通。

图1
我们发现有一些性质,
- 原本{5,6,7}\{5,6,7\}{5,6,7}是一个3完全图,只要对节点4操作,那么就可以和这个连通块{5,6,7}\{5,6,7\}{5,6,7}连通
- 因为原图(4,3),(4,2)(4,3),(4,2)(4,3),(4,2)没有边,所以我们断开(4,1)(4,1)(4,1),不会影响{1,2,3,4}\{1,2,3,4\}{1,2,3,4}的连通性
我们对第一个连通块的4号节点操作,那么图变为

图2
是不是对{1,2,3,4}\{1,2,3,4\}{1,2,3,4}中的任何一个点操作都可以?
不是!!!!!对于图1中的1号节点操作
那么图变为

发现图1中度数最小的4号节点变的不连通!!!!!!
结论:如果存在不是完全图,的连通块,那么我们选择度数最小的点
case3
所有连通块都是完全图,
假如只有两个连通块。

图4
{1,2,3,4}\{1,2,3,4\}{1,2,3,4} 和 {5,6,7}\{5,6,7\}{5,6,7}怎么连通?
对于节点4操作,告诉了我们一个性质:
- 4会和{5,6,7}\{5,6,7\}{5,6,7}构成一个 4完全图
- 4会和{1,3,2}\{1,3,2\}{1,3,2}失去连通性,
- 那么问题就转换为了新的{1,2,3}\{1,2,3\}{1,2,3} 和 {5,6,7,4}\{5,6,7,4\}{5,6,7,4}怎么连通。
结论:如果存在两个完全图,的连通块,那么我们贪心选择点数最少的连通块
case4
所有连通块都是完全图,
假如有超过两个连通块。

我们还是对4号节点操作

这里和case3的时候有点不同。
- {1,2,3,4}\{1,2,3,4\}{1,2,3,4}是4完全图, {4,7,8,9}\{4,7,8,9\}{4,7,8,9}是4完全图
- {1,2,3,4,7,8,9}\{1,2,3,4,7,8,9\}{1,2,3,4,7,8,9}不是7完全图
- 这个问题就变成了case2
总结:
- case1 连通块数为1,直接输出0
- case2 所有连通块中,有不是完全图的,那么我们操作连通块中最小度数的节点输出。
- case3 所有连通块都是完全图,且只有两个连通块,我们操作较小的那个连通块内的所有节点。
- case4 所有连通块都是完全图,且有2个以上的连通块,我们先操作任意一个连通块的一个点,转换为case2
C++
#include
#include
#include
#include