一、最小路径覆盖
定义
最小路径覆盖就是指在有向无环图中,用最少的、不相交的简单路径覆盖图中的所有点。
解法
①将原图中的每个点拆点,(将点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 普及组] 导弹拦截

思路
最多能拦截导弹数目就是求最长

最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



