【题解】CF1559D2 贪心、并查集

题目链接

考虑最优解操作后的最终状态,因为是最终状态所以对于第一个森林内的两点 \(a\in A,b\in B\) 其中 \(A,B\) 是第一个森林内两个不同的连通块,在第二个森林中一定属于同一个连通块。

连通关系具有传递性。

考虑第一个森林中 \(T_1\) 的两点 \(a\in A\) ,以及所有 \(b\not \in A,b\in T_1\) 。 在第二个森林中, \(a\)\(b\) 一定在同一个连通块中,即一个点在第二个森林中一定与所有在第一个森林中不连通的点连通,考虑两个点 \(a,c\in A,b\not\in A\) ,因为在第二个森林中 \(a\)\(b\) 连通且 \(c\)\(b\) 连通,那么一定有 \(a\)\(c\)

即最终状态的充分必要条件有一个森林是一棵树(连通块个数唯一)。

因此,只要两个森林的连通块个数均大于一,我们总是能加一条边。

直接暴力的复杂度是 \(O(n^2\log n)\) 的。

根据引理证明的启发,我们考虑确定一个点 \(a\) ,加边、加边、加边直到对于任一 \(a\in A,b\in B\) 其中 \(A,B\) 是第一个森林内两个不同的连通块的 \(a,b\) 在第二个森林中均在同一个连通块。

分别令集合 \(S,R\) 为第一个森林与点 \(a\) 不在同一个连通块的点构成的集合与第二个森林中与点 \(a\) 不在同一个连通块的点构成的集合。

一定有 \(S\cap R=\emptyset\)

并且有 \(S\) 中的所有点在第二个森林中一定与 \(a\) 连通,\(R\) 中所有点在第一个森林中一定与 \(a\) 连通。

因此对于 \(s\in S,r\in R\) 一定可以连边 \((s,r)\)

我们接下来只考虑 \(S,R\) 中不同的连通块。

发现我们可以直接每次分别从 \(S\) 集合和 \(R\) 集合内取一个连通块,在两个连通块间连边,实际的影响为在两个森林中分别令这两个连通块与 \(a\) 所在的连通块合并。

复杂度为 \(O(n\log n)\)

代码记录

posted @ 2021-10-31 16:10  Themaxmaxmax  阅读(29)  评论(0编辑  收藏  举报