CF1284F New Year and Social Network(归纳法/倍增/并查集)

10 篇文章 0 订阅
1 篇文章 0 订阅

CF1284F New Year and Social Network

给定两棵n个点的树,然后要求从T1上删掉某一条边之后从T2上找一条边替换后使得T1仍然是一颗树,将这样的边视作匹配,求解最大匹配。

首先大胆猜测存在完美匹配,然后考虑利用归纳法证明,我们对
E ( T 1 ) − E ( T 2 ) = e ∈ T 1 ∩ e ∉ T 2 E(T_1)-E(T_2)=e\in{T_1}\cap e\notin{T_2} E(T1)E(T2)=eT1e/T2
这个集合的大小进行归纳,当集合大小为0时显然两个树相同,然后可以每次找到这样的一条边,然后放到 T 2 T_2 T2上,那么一定能够构成一个环,那么中间一定有一条边连接两个不同的连通块,因为这两个端点属于不同连通块。

然后我们将这条边替换 T 2 T_2 T2上原来的边,就得到一个集合大小减一的问题,然后这条已经匹配的边在之后也不会再被用到,因为此时它唯一能够匹配的边就是相同的那一条,根据归纳法我们可以证明一定存在完美匹配。
所以我们就已经得到了一个暴力 O ( n 2 ) O(n^2) O(n2)的做法。

那么考虑优化,此时我们考虑枚举 T 2 T_2 T2中的边,那么同样对应 T 1 T_1 T1中的一个环,如果我们每次选择的都是叶子节点,那么此时一边的连通块就是唯一的,我们就可以很好找到对应边,然后考虑找到之后就得到了匹配,那么这样的边就没有用了,我们用并查集将其缩起来,然后对于 T 2 T_2 T2将原来的边删除,此时也不用加入新的边了。具体实现我们只需要dfs一边后序遍历即可。

然后考虑如何在 T 1 T_1 T1上找到对应边,那么相当于是找一个点到一个树上连通块的路径最后一条边,处理出连通块最上方的点,然后求解lca,如果lca深度小于最上方的点,那么就是最上方的点和它的父亲,否则我们可以通过倍增来求解了。

注意倍增细节:需要满足单调性,然后需要特判bz数组为0的情况。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值