二分图算法极其应用
文章平均质量分 79
qte_acm
这个作者很懒,什么都没留下…
展开
-
poj 1325
题目大意是:给你两种机器a、b , 它们各有n和m中工作模式 , 一开始两种机器都是处于0这种状态工作模式 , 然后给出k个工作 ,每个工作可以在机器a中的x模式中和机器b的y模式中完成 , 问你最少需要改变几次机器模式 。这个题目关键在于构图 , 我们这样构图 , 假如a中的x模式和b中的y模式能完成相同的工作 , 那么我们就在x和y之间连接一条边 ,那么这条边就是代表着一个工作 , 就原创 2013-12-14 20:03:35 · 481 阅读 · 0 评论 -
LA 3353 Optimal Bus Route Design 二分匹配和有向图中的环
题意:题目给出一个有向图 , 找若干个圈,使得每个结点切好属于一个圈,并且所有圈的总长度最小 , 如果没有满足条件的就输出 'N‘ 。注意:1、有重边2、如果有向边(u , v) , (v , u)都存在 , 它们的长度不一定相同。解法: 刚看这个题目的时候,没有什么思路,知道是用二分匹配之后就更没思路了。这题的关键还是在于构图:每个点分成入度点和出度点两个点,然后原创 2014-05-08 10:06:14 · 1340 阅读 · 0 评论 -
poj 3041二分匹配
题意:矩阵上有一些小行星,占据了一些格子,我们每次操作可以清理一列中的所有小行星,也可以清理一行中的所有小行星,问最少进行多少次操作可以清理掉所有的小行星。分析:建图之后,会发现,题目意思就等于:最小覆盖点,最小覆盖点 = 最大匹配;问题就 = 求二分图的最大匹配数。 对于匈牙利算法有两种形式:1、bfs 时间32ms//32ms#include#includeusing原创 2013-12-14 20:01:55 · 581 阅读 · 0 评论 -
uva 10615
转载:http://aoxuemugualu.blog.163.com/blog/static/191501202201414112723398/题意:给出一个方格图,里面有一些是“*”,你要为他们染色,使得每行每列不会有同样的颜色,并且颜色要最少。思路:这题给跪了。。。建图的话是按行号和列号分别为两个集合,如果该行该列有“*”,就连一条线,我就只能想到这里了。。。原创 2014-05-06 22:28:23 · 1243 阅读 · 1 评论 -
poj 2771 有点难度最大独立集
题意:一个老师要带一些学生去旅游 , 下面任意两个学生至少要满足下面一个条件:1、身高相差要超过40cm2、性别相同3、最喜欢的音乐属于不同类型4、最喜欢的体育比赛相同解 法:我们首先这样来考虑这个问题 , 以上4个条件 , 至少满足一个条件 , 因此对于满足有很多情况, 那么我们反过来想,如果所有条件都不满足 , 那么这个两个人肯定不能同时去 , 这中思想只需要一种情况 , 因此相原创 2013-12-14 20:06:16 · 670 阅读 · 0 评论 -
LA 3126 二分匹配---DAG中的最小路径应用
二分匹配在DAG中的最小路径覆盖应用。原创 2014-05-06 15:32:36 · 1003 阅读 · 0 评论 -
uva 11419最小点覆盖和…
大概题意:在一个R*C大小的网格中,网格上面放着一些目标,可以在网格外面发射子弹,子弹可以沿着垂直或则水平的方向射出,并打掉该路径上的所有目标,问最少需要多少子弹,并把这些子弹的位置输出。解法:每发射一个子弹,我们就能把某一行或者某一列的目标都清楚掉,因此我们每一行、每一列看成一个目标,并把这一行、列中的目标都标同一个号,那么我们就能通过同一个位置的目标来得到这个位置所在行、列的关系(在它们原创 2013-12-14 20:06:19 · 816 阅读 · 0 评论 -
二分图的最佳完美匹配(和一些变形…
最佳完美匹配分两种:权值和最大的完美匹配、权值和最小的完美匹配。时间复杂度都为:O(n^4) ;1、权值和最大的完美匹配用的算法是KM(匈牙利算法)。下面分析一个这个算法的原理:1、首先为每个点建立一个函数(可行顶标) , 使得对于任意的弧有l(x)+l(y)>=w[x][y] (弧有x、y组成 ,w[x][y]是该弧的权值) , 假设这样的弧组成的图成为相等子图也就是原图的生成子图原创 2013-12-14 20:03:27 · 915 阅读 · 0 评论 -
poj 1469
题目大意:给出一些课程 , 和选这些课程的学生 , 要求每个课程选一个代表 , 问能不能使所有课程的代表都是不同的学生。这是一个基本的二分匹配的问题,但注意,输入输出时一定要用scanf、printf等标准输入输出,不要用输入输出流,不然会超时。 割掉 #include#includeusing namespace std;const int MAX = 520 ;int gr原创 2013-12-14 20:01:57 · 582 阅读 · 0 评论 -
匈牙利算法
匈牙利算法匈牙利算法链接: USACO 4.2.2 ThePerfect Stall 完美的牛栏 stall4这是一种用增广路求二分图最大匹配的算法。它由匈牙利数学家Edmonds于1965年提出,因而得名。 定义未盖点:设Vi是图G的一个顶点,如果Vi 不与任意一条属于匹配M的边相关联,就称Vi 是一个未盖点。交错路:设P是图G的一条路,如果P的任意两条相邻的边一定是一条属于M而另原创 2013-12-14 20:01:51 · 707 阅读 · 0 评论 -
zoj 1654 中等二分匹配
解法1:我们可以把每个空地看成一个点 , 然后把所有有关联的空地之间连一条边 , 再求所得到的图的最大独立集 ,但是最大独立集是一个NP问题 , 因此并没有有效的算法 , 来求出这个。解法2:分别把每一行、每一列看成是一个状态 , 最后求最大匹配代码:#include#include#include#includeusing namespace std;#define ma原创 2013-12-14 20:06:11 · 786 阅读 · 0 评论 -
poj 2195 最优匹配算法的优化
最优匹配算法:通过构造每个点的顶标 , 来得到最优匹配 , 在普通的算法中 , 时间复杂度为O(n^4) , 我们可以通过改善改变顶标的的算法 ,可以优化到O(n^3) 。对于改变顶标 , 我们可以在寻找增广路时 , 改变顶标 。代码:总权值最小的最优匹配bool match(int i) // 寻找增广路{ s[i] =true; for(int j =原创 2013-12-14 20:06:14 · 685 阅读 · 0 评论 -
poj 2226
题意:给出一个矩阵 , 每个点代表青草或者泥泞的路 , 问你最少要多少块木板(宽度为一个点的宽度 ,长度任意)才能把这些泥泞的路都盖住 , 并且不能把草盖住 , 木板可以重合 。这题要是没加(不能把草盖住)这个条件 , 那么就是普通的最小路径覆盖 。然而加了这个题之后 , 还是用最小路径覆盖 , 只不过要重新建过图。最小路径覆盖 = 原图节点数 - 建图后的最大匹配 。建图:分两步原创 2013-12-14 20:04:08 · 701 阅读 · 0 评论