二分图匹配
文章平均质量分 54
小黑妹
穷则独善其身,达则兼济天下!
展开
-
poj2239 Selecting Courses解题报告
题目意思: 一天12节课,一个星期七天。有n中课程,每种课程只要上m[i]节课的一节就可以了,求最多能上多少节课? 解题思路:这是一道典型的求二分图的最大匹配问题,用匈牙利算法解决。代码: #includeusing namespace std;int a[500][100],match[500],n,m=84,che[500];int dfs(int k)原创 2012-07-05 23:20:58 · 483 阅读 · 0 评论 -
hdu 1068 解题报告
题意:大学二年级的时候,一些同学开始研究男女同学之间的缘分。研究者试图找到没有缘分同学的最大集。程序的结果是要输出这个集合中学生的数量。 解题思路:根据题意可将题目转化成求二分图的最大独立集=节点数—最大匹配数。题目中并没有指明男生女生,真正的匹配数因该是m/2,那么v=n-m/2. 代码: #includeusing namespace std;int n,m,che[原创 2012-07-05 23:33:05 · 497 阅读 · 0 评论 -
二分图的概念
二分图设G=(V,E)是一个无向图,如果顶点V可分割为两个互不相交的子集(A,B),并且图中的每条边(i,j)所关联的两个顶点i和j分别属于这两个不同的顶点集(i in A,j in B),则称图G为一个二分图匹配给定一个二分图G,在G的一个子图M中,M的边集中的任意两条边都不依附于同一个顶点,则称M是一个匹配最大匹配边数最多的匹配(子图M)称为图G的最大匹配最原创 2012-08-30 20:24:10 · 713 阅读 · 0 评论 -
poj 3020 Antenna Placement
题目大意:在一个坐标图中有一些点需要覆盖,每在一个点上覆盖就可在覆盖它上下左右4个点中任一个,问最小放几个。 分析:利用黑白染色法把每一个点都和与之相邻的4个点连边,就构成了一个二分图。要求的就是有最小的点数覆盖全部边,即求最小路径覆盖=最大独立集=所有点-最大匹配由此可以求出最优解。实现方法——匈牙利算法即可。注意的是,这里的点是所有可以放得点*2,而匹配数也是正常匹配数的二倍(A到原创 2012-08-16 09:30:15 · 488 阅读 · 0 评论 -
poj 1422 最小路径覆盖
题意:一个地图上有n个小镇,以及连接着其中两个小镇的有向边,而且这些边无法形成回路。现在选择一些小镇空降士兵(1个小镇最多1个士兵),士兵能沿着边走到尽头,问最少空降几个士兵,能遍历完所有的小镇。思路:匈牙利算法求最小路径覆盖:在一个有向图中,路径覆盖就是在图中找一些路径,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联;(如果把这些路径中的每条路径从它的起始点走到原创 2012-08-24 10:09:17 · 1337 阅读 · 0 评论 -
邻接表二分图匹配的模板
#include#include#includeusing namespace std;const int nMax=20005;class edge{public: int v,nex;};edge e[200005];int n,m,k,head[nMax];int link[nMax];bool vis[nMax];void addedge(int b,int原创 2012-10-06 09:59:09 · 1204 阅读 · 0 评论 -
POJ 1466 Girls and Boys(最大独立点集)
题意:有n个学生,其中他们之间某些人有联系,问你最多能找出多少个学生组成一个集合,使得这个集合内的学生任何两个之间没有联系。 思路:最大独立集问题:在N个点的图G中选出m个点,使这m个点两两之间没有边.求m最大值.如果图G满足二分图条件,则可以用二分图匹配来做.最大独立集点数 = N - 最大匹配数/2,然后就是匈牙利算法实现了。 > 这个问题拆点后的二分图为男在一边,女的在另一边原创 2012-08-24 10:30:50 · 985 阅读 · 0 评论 -
最小路径覆盖
题目大意:给出N(1000)个数字(算法:有向图最小路径覆盖数思路:因为要求取出一些点,使得他们之间没有整除关系,很容易想到利用整除关系建立一个图,然后看最多有多少个点能不相连,如果把图看作无向图,那么就很难想到做法,至少无向图最大点独立集是不能在1000的规模下运行的。如果a是b的约束,我们建立一条a向b的有向边,最后发现,要求的其实就是最小路径覆盖数。最小路径覆盖数:在一个原创 2012-08-23 17:12:03 · 4229 阅读 · 0 评论