二分图最大匹配
HumveeA6
这个作者很懒,什么都没留下…
展开
-
(模板)二分图最大匹配,最大流算法
转换为最大流做即可。注意加边的技巧。 代码如下:#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<vector>#include<queue>using namespace std;struc...原创 2018-03-09 23:08:35 · 1634 阅读 · 1 评论 -
最小路径覆盖(模板)
对于一个给定的有向无环图(DAG),求其最小路径覆盖。题目可参见洛谷P2764。 【问题分析】 有向无环图最小路径覆盖,可以转化成二分图最大匹配问题,从而用最大流解决。 【建模方法】 构造二分图,把原图每个顶点i拆分成二分图X,Y集合中的两个顶点Xi和Yi。对于原图中存在的每条边(i,j),在二分图中连接边(Xi,Yj)。然后把二分图最大匹配模型转化为网络流模型,求网络最大流。 最小路径...原创 2018-03-10 16:49:07 · 306 阅读 · 0 评论 -
(模板)二分图匹配匈牙利算法
似乎只有在很少的奇怪的情况下才非得用匈牙利算法而不能用最大流的算法(比如洛谷P1640?)#include<cstdio>#include<iostream>#include<algorithm>#include<cstring>#include<vector>using namespace std;vector<...原创 2018-03-10 22:56:35 · 150 阅读 · 0 评论 -
洛谷P1129
无论原图是怎么样的,我们都能把每一行放在我们期望的位置上(当然合不合法先不说) 原理参照冒泡排序 //总体的思路就是二分图匹配 //原图中的行序号我们记为i,我们期望得到的图中的行序号记为j //枚举原图中的行i,如果在我们期望的图中它放到第j行是合法的(对角线为黑子即为a[i][j]=true) //那就让j–i连一条边 //这样我们就得到了一个二分图 //说明:mat...原创 2018-03-11 18:46:31 · 224 阅读 · 0 评论 -
洛谷P2053修车
我们把每个人拆成n个点,一共m乘n个,其中任意一个记为a[i,j],也就是第i个人修的倒数第j辆车。这里要注意,这个倒数第j是相对于第i个人的,并不是总体上的倒数第j辆。我们再开n个点,其中任意一个记为k,也就是第k辆车。我们的原始数组,第i个人修第k辆车,记为b[i,k]。把a[i,j]和k一连,就是第i个人倒数第j个修车,修的是第k辆。因为这辆车是倒数第j个修,所以一共要有j辆车等待b[i,k...原创 2018-03-11 22:30:23 · 187 阅读 · 0 评论