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

基本问题

问题描述

给定 \(m\) 个集合 \(S_1,S_2...S_m\) ,满足任意两个集合 \(S_i,S_j\) 不交,令 \(n=\sum |S_i|\) ,满足 \(n|2\)

求一组匹配 \(M=\{(x_i,y_i) |x_i\in S_k,y_i\in S_j,k\not = j\}\) 其中 \((x,y)\) 为无序点对,且满足任意 \(x\) 仅在一个点对中出现。

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

构造算法

定理:有解的充分必要条件为 \(\max(|S_i|)\le \lfloor \dfrac{n}{2} \rfloor\)

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

算法步骤

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

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

\(n'=\dfrac{1}{2}\sum |S_i|\) ,计数器 \(t=0\)

  • 若当前存在集合 \(S_i\) ,满足 \(|S_i| = n'\) ,在该集合内选取点 \(x\) ,集合外选取点 \(y\) ,令匹配集合 \(M\gets M\bigcup (x,y)\) ,将点 \(x\)\(y\) 从集合中删除。

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

  • \(t \gets t+1\)

算法证明

引理:\(\forall 0\le t\le \dfrac{n}{2}\),满足 \(\max(|S_i|)\le n'\)

证明:

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

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

当我们选一对匹配后,\(n'\gets n'-1\) ,因为 \(t=k\)\(\max(|S_i|)\le n'\)\(\max(|S_i|)<n'\) ,那么在选择新的一对匹配后,一定有 \(\max(|S_i|)\le n'-1\)

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

故引理成立。

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

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

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

问题描述

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

问题转化

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

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

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

\(cnt\)\(T\) 的叶子节点个数,一个经典的结论为 \(\lceil \dfrac{cnt}{2} \rceil\)

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

朴素构造策略

考虑钦定根节点 \(root\) ,儿子集合 \(son\)\(|son| > 1\) ,考虑 \(x,y\in son\)\(a\in T(x),b\in T(y)\)

\(a,b\) 分别是 \(x\)\(y\) 子树内的叶子节点。

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

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

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

解决匹配问题

考虑找到一个带权重心 \(root\) ,满足对于任意一棵子树内的叶子个数小于等于 \(\lfloor \dfrac{cnt}{2} \rfloor\)

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

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

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

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

CF468D Tree

题目链接

题目描述

给定一棵树,边带正权,求排列 \(p_1,p_2...p_n\) ,满足 \(\sum dist(i,p_i)\) 最大。

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

题解

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

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

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

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

类似基本问题构造即可。

posted @ 2021-09-21 12:56  Themaxmaxmax  阅读(214)  评论(0编辑  收藏  举报