二分匹配
文章平均质量分 54
ijbuhv
这个作者很懒,什么都没留下…
展开
-
poj 1719Shooting Contest
//本题大意是对于一个r*c的矩阵,每一列有两个是白色的//现在选c个位置,要求每一行至少有一个白色的方格被选上//每一列只能选一个//用二分匹配求出最大匹配,如果最大匹配等于r,则满足//每一行至少有一个白色的格子被选上//注意c>r的情况#include#include#includeusing namespace std;const int maxn原创 2015-03-19 20:30:16 · 712 阅读 · 0 评论 -
hdu3718Similarity KM算法
//n个物品,用字母表示每个物品的种类,//给出标准答案对于每种物品的字母表示//给出每个人的答案,问怎样的匹配使得两个答案的相似度更高//{A A B A B B C C C C},{F F E F E E D D D D}表示一种答案//对每个字母和字母之间建图,两个答案在同一个位置的字母之间的边的权值加1//那么就只需要求其最大带权匹配#include<cstdio>#inclu原创 2015-08-07 17:37:21 · 617 阅读 · 0 评论 -
hdu1533Going Home KM算法
//给一个n*m的图,//m表示人,h表示房子//问所有人走回家的最小步数//每个人只能进一间房//很明显的最大带权匹配//每个人到每每间房的距离即为权值//由于是求最小,只要改为负权就行#include#include#include#include#includeusing namespace std ;const int maxn = 110 ;const int原创 2015-08-17 14:15:06 · 672 阅读 · 0 评论 -
hdu3488Tour KM算法
//给一个有向图,//找出若干环,使得这些环覆盖所有点且每个点只能在一个环中//问所得的所有环的所有边权值之和的最小值为多少//对于每一个点只有一个入度和一个出度,那么将每个点拆成//入度点和出度点,将所有入度点和所有出度点构成一个完备匹配//由于是完备匹配,所以每个点的出度和入度都有一个不是自己的点//相连,那么将完备匹配的所有点连接起来一定是若干环//所得完备匹配的最小匹配即为答原创 2015-08-17 16:11:38 · 614 阅读 · 0 评论 -
poj2226Muddy Fields 二分匹配之最小点覆盖
//给r*c的 field ,有的地方有水,用宽度为1,长度任意的木板将这些有水的地方,//遮住,木板可以相互叠加,木板不能遮住有草的地方//可以每行中的连续的格子看成一个点xi,每一列中连续的格子看成一个点yj//将每一个有水的格子看成一条边连接对应的xi , yj//那么其最小点覆盖即为答案#include<cstdio>#include<cstring>#include<ios原创 2015-08-05 17:19:52 · 538 阅读 · 0 评论 -
poj2771Guardian of Decency 二分匹配之最大独立集
//男生和女生需要一些条件就不是情侣//问最多能带多少人,这些人中没有情侣//很明显的最大独立集#include#include#include#include#includeusing namespace std ;const int maxn = 510 ;int vis[maxn] ;int match[maxn] ; int n ;vect原创 2015-08-05 18:47:10 · 812 阅读 · 0 评论 -
poj3216Repairing Company 二分匹配之最小路径覆盖+floyd
//m个任务,每个任务都有开始时间和需要花的时间,以及其在哪楼地方工作//给出地图,每楼到另一楼的路径所花的时间//问最少需要安排多少人能完成这些任务//对任务和任务之间建图,如果做完任务i还能做任务j那么i-j之间建立一条边//这样只需要找到最小路径覆盖即为最终答案#include<cstdio>#include<iostream>#include<cstring>using na原创 2015-08-06 11:03:23 · 678 阅读 · 0 评论 -
hdu3468 Treasure Hunting 二分匹配
//给一个n*m的图//.表示空白地//*表示有黄金//#表示墙//一个人需要按照A...Z..a..z的顺序以最短路径走到下一个//每次只能在他的路线上经过的地方取一块黄金//问最多能取多少黄金//对于每次起点和终点,用bfs搜索最短路,再用dfs找出最短路线经过的所有点//对于第i次找最短路线与其走过的点建立边,然后用二分匹配就能找出#include#include#in原创 2015-08-18 18:47:23 · 567 阅读 · 0 评论 -
poj3692Kindergarten 二分匹配之最大独立集
//g个girl , b个boy , gril都被彼此认识,boy也彼此认识//有的girl和boy也彼此认识//问最多能选出多少人,这些人都彼此认识//对陌生人建立一个图//那么其最大独立集就是最多的彼此认识的人#include<cstdio>#include<cstring>#include<iostream>using namespace std ;const int max原创 2015-08-06 19:09:47 · 507 阅读 · 0 评论 -
hdu4185Oil Skimming 二分匹配
//n*n的油田,有的有油,有的是水,//问用最多能覆盖多少个1*2的格子//对每一个有油的格子,如果其上下左右有油,那么在这两个点建边//然后求最大匹配#include<cstdio>#include<cstring>#include<iostream>#include<vector>using namespace std ;const int maxn = 610 ;int原创 2015-08-06 17:44:25 · 812 阅读 · 0 评论 -
hdu3315My Brute KM算法
//starvae和xingxing各有n个小弟,每个小弟都有hp和攻击力//对于第i个小弟,starvae小弟的攻击力为a[i] ,xingxing小弟的攻击力为b[i]//每场比赛,starvae小弟先攻击,然后一人攻击一次,谁的血量不先大于0谁输//starvae用第i个小弟赢了比赛得到v[i]的分数,输了减去v[i]的分数//刚开始是starvae的第i个小弟岁星星的第i个小弟//原创 2015-08-07 14:53:54 · 669 阅读 · 0 评论 -
hdu2853Assignment kM算法
//n个人,匹配m个任务,每个人完成每个任务的效率不同//刚开始已经有了匹配方案,现在重新设计匹配方案,使得效率最高,且尽量保存//原来的匹配方案,//将所有权值*1000, 然后对于原来匹配的边的权值+1,用KM算法求出最大带权匹配ans//那么最终的最大效率为ans/1000 , 保留原来的匹配边的个数为ans%mod#include<iostream>#include<cstdio原创 2015-08-07 18:30:16 · 527 阅读 · 0 评论 -
poj 1548 Robots 最小路径匹配解法
//最小路径覆盖=N-最大匹配#include#include#include#includeusing namespace std;const int maxn = 30*30;int line[maxn][maxn];int vis[maxn];int match[maxn];int N;int find(int start){int i;原创 2015-03-18 21:16:18 · 806 阅读 · 0 评论 -
hdu3829Cat VS Dog 二分匹配求最大独立集
/*可以用最大独立集做对于一个人喜欢的和另一个人不喜欢的可以将这两个人用一条线相连由于一个人喜欢的和不喜欢的是猫和狗中的任意一个,所以这图是一个二分图最大独立集中任意两个人的喜欢的和另一个人不喜欢的是不同的所以在这个集合里删除所有的人的不喜欢的,不可能会有人喜欢的被删所以最大独立集就是开心的最多的人*/#include#include#includeus原创 2015-03-16 19:21:48 · 1148 阅读 · 0 评论 -
poj 2060 Taxi Cab Scheme 最小路径覆盖
//二分匹配的最小路径覆盖//对于第i次ride,如果在第i次ride结束后还能在第j次ride出发前赶到第j次的出发点//那么i到j就有一条边//根据最小路径覆盖 = N - 最大匹配即可得到答案#include#include#include#includeusing namespace std;const int maxn = 510;int lin原创 2015-03-20 20:10:32 · 541 阅读 · 0 评论 -
poj1469 COURSES 二分匹配模板水题
#include#include#includeusing namespace std;const int maxn = 310;int match[maxn];int line[maxn][maxn];int vis[maxn];int N , P;int find(int start){ for(int i = 1;i {原创 2015-03-17 17:53:34 · 578 阅读 · 0 评论 -
poj 1274The Perfect Stall 二分匹配模板水题
#include#include#includeusing namespace std;const int maxn = 210;int match[maxn];int line[maxn][maxn];int vis[maxn];int N , M;int find(int start){ for(int i = 1;i {原创 2015-03-17 17:55:11 · 627 阅读 · 0 评论 -
poj 3041Asteroids 二分匹配求最小点覆盖模板题
//最大匹配=最小覆盖//这题是求最小覆盖点的模板题#include#include#includeusing namespace std;const int maxn = 510;int line[maxn][maxn];int match[maxn];int vis[maxn];int N , K;int find(int start){原创 2015-03-21 16:54:40 · 685 阅读 · 0 评论 -
poj1486 二分匹配的唯一边
//用二分匹配求出最大的匹配数//然后任意删除一条边//如果再次求得的最大匹配不是原来的值//那么该边就是这个最大匹配的唯一边#include#include#includeusing namespace std;const int maxn = 110;int line[maxn][maxn];int match[maxn];int vis[maxn]原创 2015-03-17 21:44:18 · 1008 阅读 · 0 评论 -
poj 3020Antenna Placement 最小边覆盖
//最小边覆盖//最小边覆盖=最大独立集=n-最大匹配//这个是在原图是二分图上进行的//由于此题为无向图//最小边覆盖=最大独立集=n-最大匹配/2;#include#include#includeusing namespace std;const int maxn = 45*15;int line[maxn][maxn];int match[maxn原创 2015-03-21 21:55:52 · 1066 阅读 · 0 评论 -
hdu 3861 强连通分量缩点+二分匹配求最小路径覆盖
//用tarjan求出强连通分量,再将强连通分量的所有点缩为一个点//具体的tarjan算法http://www.cnblogs.com/saltless/archive/2010/11/08/1871430.html//然后重新建图,很容易想到剩下的是一个最小路径覆盖的题目#include#include#include#includeusing namespace原创 2015-03-23 20:07:58 · 586 阅读 · 0 评论 -
对于二分匹配的总结
(1) 最大独立集: 在一个二分图中,选择一些顶点,使得所选择的点集中任意两个顶点之间没有边相连最大独立集 = 顶点个数 - 最大匹配设所有匹配了的点的集合为A,所有没有匹配的点的集合为B设(u,v)为一条匹配边,那么集合B中的点最多能和u,v中的一个点中存在边,如果两条边都存在边的话会再次产生增广路而使得它不是最大匹配。那么对于匹配(u,v)中,如果存在与B集合中的点有边的点且这个点原创 2015-03-23 20:44:50 · 537 阅读 · 0 评论 -
hdu4751Divide Groups 二分图判断
//给出n个点,m条边,问能否可以分为两个部分//这两个部分的所有点的任意两条边都有边//可以看出是判断其补图是否为二部图//直接dfs判断一下就行#include#include#includeusing namespace std ;const int maxn = 110 ;int vis[maxn][maxn] ;int visit[maxn] ;int n ;b原创 2015-10-07 19:23:07 · 297 阅读 · 0 评论