
二分图
文章平均质量分 57
皮得一1
这个作者很懒,什么都没留下…
展开
-
hdu 1054 Strategic Game(最小点覆盖)
题意:找出最少的点,使得所有的边都被覆盖。思路:最大匹配:定义:给出一个二分图,找一个边数最大的匹配,即选尽量多的边,使得任意两条选中的边均没有公共点。如果所有点都是匹配点,则称这个匹配为完美匹配。定理:柯尼希定理:二分图最小点覆盖的点数=最大匹配数。最小路径覆盖的边数=顶点数n-最大匹配数最大独立集=最小路径覆盖=顶点数n-最大匹配数原创 2016-03-14 12:43:20 · 429 阅读 · 0 评论 -
hdu 1083 Courses(二分图最大匹配)
题意:有p门的课,每门课都有若干学生,现在要为每个课程分配一名课代表,每个学生只能担任一门课的课代表,如果每个课都能找到课代表,则输出"YES",否则"NO"。思路:匈牙利算法模板。#include #include #include using namespace std;#define MAXN 305int g[MAXN][MAXN];int uN,vN;int原创 2016-01-28 00:59:54 · 340 阅读 · 0 评论 -
poj 2594 Treasure Exploration(二分图匹配+Floyd求传递闭包)
题意:在一个有向图上,至少放多少个机器人可以遍历整个图(每个顶点可以重复遍历)?思路:最小路径覆盖+传递闭包(Floyd算法)。在原图的基础上要重新建图:利用Floyd算法,只要点i和点j可到达就认为它们是连通的。Floyd算法不仅可以求最短路,还可以求点的两两连通性(传递闭包),如1->2,2->3则1->3。最小路径覆盖 = 节点数 - 最大匹配数最大匹配数用匈牙利算法求得原创 2016-01-28 00:26:38 · 400 阅读 · 0 评论 -
hdu 2444 The Accomodation of Students(二分图判断+匈牙利算法)
题意:n个点,m条边,要求判断构成的图是否是二分图,是的话求出最大匹配。思路:先判断是否为二分图,在用匈牙利模板求最大匹配。二分图判断的话用bfs进行染色就行了。因为一个图是二分图的充要条件是图中无奇圈,即图中无长度为奇数的回路,因此,从一个点出发,将它染成黑色(0),再将它相邻的点染成白色(1),然后从相邻的点出发,去染其它的点,当出现颜色相同的两个点相邻时,就可判断该图不是二分图。原创 2016-01-27 23:54:20 · 400 阅读 · 0 评论 -
poj 1422 Air Raid(最小路径覆盖)
题意:一个地图上有n个小镇,以及连接着其中两个小镇的有向边,而且这些边无法形成回路。现在选择一些小镇空降士兵(1个小镇最多1个士兵),士兵能沿着边走到尽头,问最少空降几个士兵,能遍历完所有的小镇。最小路径覆盖问题,因为是有向图,就可以把一条路径拆成起点和终点,从而建立二分图最小路径覆盖 = 节点数 - 最大匹配数最大匹配数用匈牙利算法求得。#include#include#in原创 2015-11-15 20:55:41 · 449 阅读 · 0 评论 -
poj 3041 Asteroids(二分图匹配匈牙利算法)
#include#include#includeusing namespace std;int pp[510][510];int map[510] , vis[510];int n,k;int find_path(int x){ for(int i=1;i<=n;i++) { if(!vis[i] && pp[x][i]) {原创 2015-11-15 20:41:52 · 396 阅读 · 0 评论 -
poj 1325 Machine Schedule(最小点覆盖即最大匹配,匈牙利算法)
题意:A机器有n个模式,B机器有m个模式,每个作业可以在任何机器的特定模式下工作,转换模式需要耗时,求最小耗时思路:把AB两机器的模式当成二分图顶点,模式之间的连线就是某个作业可以在该两个模式下工作,就转换成求最小点覆盖,用最少的点覆盖最多的边。最小点覆盖=最大匹配 所以匈牙利算法A之。#include#include#includeusing namespa原创 2015-11-15 20:39:53 · 424 阅读 · 0 评论 -
hdu 2063 过山车(基础二分图匹配匈牙利算法)
特别棒而且有趣的一个理解匈牙利算法的博客:http://blog.youkuaiyun.com/dark_scope/article/details/8880547#include#include#includeusing namespace std;int pp[510][510];int map[510] , vis[510];int k,w,m;int find_path(int x)原创 2015-11-15 20:05:24 · 330 阅读 · 0 评论