【总结】一类树上点对匹配问题

基本问题

问题描述

给定 m 个集合 S1,S2...Sm ,满足任意两个集合 Si,Sj 不交,令 n=|Si| ,满足 n|2

求一组匹配 M={(xi,yi)|xiSk,yiSj,kj} 其中 (x,y) 为无序点对,且满足任意 x 仅在一个点对中出现。

即求一组匹配,满足任意一对匹配为不同集合间的匹配。

构造算法

定理:有解的充分必要条件为 max(|Si|)n2

必要性显然,考虑证明充分性。

算法步骤

对于充分性的证明,为一个构造算法:

重复执行以下步骤直到所有集合为空:

n=12|Si| ,计数器 t=0

  • 若当前存在集合 Si ,满足 |Si|=n ,在该集合内选取点 x ,集合外选取点 y ,令匹配集合 MM(x,y) ,将点 xy 从集合中删除。

  • 否则随便选取一对不同集合的点对 (x,y) ,令匹配集合 MM(x,y)

  • tt+1

算法证明

引理:0tn2,满足 max(|Si|)n

证明:

对于 t=0 时,引理成立。

t=k 时成立,考虑证明 t=k+1 时也成立。

当我们选一对匹配后,nn1 ,因为 t=kmax(|Si|)nmax(|Si|)<n ,那么在选择新的一对匹配后,一定有 max(|Si|)n1

max(|Si|)=n ,因为 |Si|=n 的集合至多有两个,所以选择一对新的匹配后一定有 max(|Si|)=n1

故引理成立。

若引理成立,考虑 n=2 时,一定有 max(|Si|)=1

剩下最后一对点匹配即可。

经典问题:无向图加最少边边双连通的下界构造

问题描述

给定无向图 G=(V,E) ,令新图 G=(V,EE) ,图 G 不存在桥,求满足 |E| 最小情况下的一组 E

问题转化

令树 T 为无向图 G=(V,E) 进行边双连通分量缩点后的树。

定义非树边边 (x,y) 覆盖树边 (u,v) 当且仅当边 (u,v) 在树上 xy 的最短路上。

那么问题即:添加尽量少的边使得树 T 的每条树边被覆盖至少一次。

cntT 的叶子节点个数,一个经典的结论为 cnt2

下面,给出一种能够构造出下界的构造策略。

朴素构造策略

考虑钦定根节点 root ,儿子集合 son|son|>1 ,考虑 x,ysonaT(x),bT(y)

a,b 分别是 xy 子树内的叶子节点。

连边 (a,b) ,使得所有叶子节点至少连一条非树边。

这样是一定能够满足每条树边被覆盖至少一次的(因为每对 (a,b) 满足 LCA(a,b)=root 考虑每个点和父亲之间的边,其一定会被子树内叶子节点的某对匹配覆盖)。

那么问题即选取若干对叶子节点的匹配,使其属于根节点的两棵不同子树。

解决匹配问题

考虑找到一个带权重心 root ,满足对于任意一棵子树内的叶子个数小于等于 cnt2

可以证明带权重心一定存在,证明类似树分治。

cnt|2 ,可以转化成上面的基本问题很轻松的达到下界。

对于 cnt|2 ,可以拿出一个叶子节点后做 (cnt1) 规模的问题,然后对于该叶子节点随便连一个点,也可以轻松构造到下界。

扩展练习:P7320 「PMOI-4」可怜的团主

CF468D Tree

题目链接

题目描述

给定一棵树,边带正权,求排列 p1,p2...pn ,满足 dist(i,pi) 最大。

求出满足 dist(i,pi) 最大的前提下字典序最小的一组排列。

题解

首先可以将 n 个点拆成 2×n 个点,那么排列的问题可以转化成这 2×n 个点的匹配问题。

具体地:令集合 S={1,2,...,n},T={1,2,...n} ,求一组 ST 的最大带权匹配,匹配 (x,y) 的代价为 dist(x,y)

考虑答案的上界,对于边 (x,y) 的贡献至多为 2×min(size[x],size[y])

考虑构造出上界,同样钦定重心为根。

类似基本问题构造即可。

posted @   Themaxmaxmax  阅读(243)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话
点击右上角即可分享
微信分享提示