题解 CF1559 D1&D2

这是 CF1559 D1 & D2 的题解。

先来看看 Easy Version。数据范围: 1 ≤ n ≤ 1 0 3 1\le n\le 10^3 1n103


结论:最终态的两片森林中至少有一片是一棵树。

证明:

当第一片森林中只有一棵树时,原命题成立。

于是设第一片森林中至少有两棵树。设其中两棵分别为 A A A B B B,那么 ∀ a ∈ A , b ∈ B \forall a\in A,b\in B aA,bB,它们在第一片森林中均不联通。由于是最终态,若它们在第二片森林中仍不连通,则必然能再连边 ( a , b ) (a,b) (a,b),不满足最终态定义。因此 ∀ a ∈ A , b ∈ B \forall a\in A,b\in B aA,bB,在第二片森林中 a a a b b b 必然连通。从而 A A A B B B 在第二片森林中属于同一棵树。同理可得第一片森林中所有的树在第二片中都属于同一棵树,即第二篇森林中只有一棵树。从而原命题成立。


因此,无论加入合法边顺序不同,甚至加入的合法边都不同,最终加入的边数是相同的,即 ( n − 1 ) − min ⁡ ( m 1 , m 2 ) (n-1)-\min(m1,m2) (n1)min(m1,m2)

看到 1 ≤ n ≤ 1 0 3 1\le n\le 10^3 1n103 的数据范围,考虑直接枚举两点 a a a b b b,若满足 a ≠ b a\ne b a=b 且连边前 a , b a,b a,b 在两片森林都不连通,那我们就连上这条边。这种策略是在上述结论下得出的,因此是正确的。使用带路径压缩和按秩合并的并查集,时间复杂度为 O ( n 2 α ( n ) ) O(n^2\alpha(n)) O(n2α(n))

具体代码实现

再来看看 Hard Version。数据范围: 1 ≤ n ≤ 1 0 5 1\le n\le 10^5 1n105

考虑优化贪心。根据上面的结论,我们可以先找一个中心点 s s s,然后尝试将所有点与其连边。然后设第一片森林为 A A A,第二片森林为 B B B。设 A A A 中不与 s s s 连通的点集为 P P P B B B 中不与 s s s 连通的点集为 Q Q Q ∀ a ∈ P \forall a\in P aP s s s a a a 不能连边的原因是因为 s s s a a a B B B 中已经连通。同理 ∀ b ∈ Q \forall b\in Q bQ s s s b b b A A A 中已经连通。因此 P ∩ Q = ∅ P\cap Q=\varnothing PQ=。注意到此时 a a a b b b 已经满足连边条件,我们只需再满足连边前 a , b a,b a,b 在两片森林都不连通即可。使用带路径压缩和按秩合并的并查集,时间复杂度近似为 O ( n + m ) O(n+m) O(n+m)

具体代码实现

当然,官方题解的解法也是值得借鉴的,其中没有使用按秩合并,时间复杂度为 O ( n log ⁡ 2 n ) O(n\log^2n) O(nlog2n),在这里就挂出 链接

本篇题解参考了 lijunhan 的 CF1599D1 题解Macesuted 的 CF1599D2 题解

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值