最小路径覆盖与最小链覆盖 Dilworth定理:最小链覆盖等于最长反链(详细证明与经典例题)

一、最小路径覆盖

定义

最小路径覆盖就是指在有向无环图中,用最少的不相交简单路径覆盖图中的所有点

解法

①将原图中的每个点拆点,(将点u拆成u与u+n);
②将原图中的每条边 <u,v> 在新图中建立对应的边 <u,v+n>
③将点(1 ~ n)作为二分图的左部,将点(n+1 ~ 2*n)作为二分图的右部,进行二分图的最大匹配
④所求的最少路径数等于总点数n 减去 最大匹配数

//二分图匹配可以用匈牙利算法或者网络流即可。


二、最小链覆盖

定义

最小链覆盖和最小路径覆盖的区别是,最小链覆盖允许路径相交。
最小路径覆盖就是指在有向无环图中,用最少的可以相交简单路径覆盖图中的所有点

解法

根据**Floyd传递闭包**的思想将图的连通性传递:

for(int k = 1;k <= n;k++)
	for(int i = 1;i <= n;i++)
		for(int j = 1;j <= n;j++)
			mp[i][j] |= mp[i][k] & mp[k][j];

传递完之后,若邻接矩阵mp[u][v] == 1说明可以从u点到达v点。
做完这一步之后,我们就将问题转化成了最小路径覆盖,n-最大匹配数就是所求答案。


三、链与反链

定义

:一条链是一些点的集合,点集中任意两个点u和v,满足u能到达v或是v能到达u,则称该点集为一条链。
反链:一条反链是一些点的集合,点集中任意两个点u和v,满足u不能到达v并且v不能到达u,则称该点集为一条反链。


四、Dilworth定理

1、Dilworth定理
简单来说就是一个图的最小链覆盖等于最长反链长度百度百科根本看不懂)

2、证明
该证明比较复杂,详细证明可以看这篇文章


五、经典例题

1、洛谷P1020 [NOIP1999 普及组] 导弹拦截

题目链接:P1020 [NOIP1999 普及组] 导弹拦截
题目描述
思路
最多能拦截导弹数目就是求最长

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值