CF1559D2 Mocha and Diana (Hard Version)

CF1559D2 Mocha and Diana (Hard Version)

思路

以下,两图分别称为 A , B

首先,来证明一个贪心策略:有能连的边就连,或者说连边不会影响最大值

考虑一种特殊情况,A 只有两个联通块,记为 x 和 y , B 只有两个联通块

如果从 x 中选出任意一点都无法连接到 y 中任意一点,那么说明 x 中任意一点和 y 中任意一点在 B 中在一个连通块内

这样推得 B 仅有唯一联通块,矛盾

所以上述情况一定可以连一条边

有一个显然的东西,连一条边会让 A 和 B 的联通块个数同时减 1 ,所以不难发现如果有 A 或 B 有一边成树了,那么一定没有可以连的边了

那么现在假设 A 有 r 个联通块, B 有 c 个联通块

不妨假设 A 和 B 中点 1 所在的联通块分别为 pa , pb

那么,将 A 中除去 pa 之外的视为一个整体, B 中同理,就转换为了上面的特殊情况

于是按上述可以一直连边直到一边成为一棵树,这显然也是能连的边数的最大值

那么贪心策略得证

考虑实现

首先,贪心将所有能和 1 连的点连接

那么现在图上只有三类点,在 A 和 B 与 1 联通,仅在 A 与 1 联通,仅在 B 与 1 联通

首先发现,第一类点没任何用,它不能任何点相连

然后显然的,一个第二类点可以和任意一个第三类点相连,因为他们不在同一个联通块

于是就可以贪心的连接了

只是要注意,连接可能会使后两类点变为第一类点,判断一下就好

代码

//Nope

CF1559D2 Mocha and Diana (Hard Version)

上一篇:Windows Server 2008 系统加固


下一篇:Windows 7 Path环境变量255限制的解决办法,SUBST