图论-二分匹配
文章平均质量分 69
iHge2k
专注数据结构和算法
展开
-
hdu 2819(二分匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2819 思路:有矛盾关系的可以考虑二分匹配= =只交换行或者只交换列都能得到目的,如果不能,就输出-1。建图的时候应该建有向图。 1 #include 2 #include 3 #include 4 #include 5 #include[ 6 using namesp原创 2014-05-26 18:00:33 · 344 阅读 · 0 评论 -
loj 1150(spfa预处理+二分+最大匹配)
题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26864 思路:首先是spfa预处理出每个'G'到'H'的最短距离,然后就是二分最大距离,最大匹配验证即可。 PS:这道题一开始没什么思路,然后想先最简单的spfa预处理写一下吧,然后写着写着就突然豁然开朗,有思路了!然后就AC了! 1 #inclu原创 2014-05-26 18:08:36 · 315 阅读 · 0 评论 -
poj 1698(拆点+最大匹配)
题目链接:http://poj.org/problem?id=1698 思路:最大匹配容易想到,关键是如何建图,这里我们可以将电影按需要的天数进行拆点,然后对于可以选择的日子连边,最后只需判断最大匹配数是否等于总天数。 http://paste.ubuntu.com/5939771/原创 2014-05-26 18:03:09 · 346 阅读 · 0 评论 -
poj 1548(最小路径覆盖)
题目链接:http://poj.org/problem?id=1548 思路:最小路径覆盖是很容易想到的(本题就是求最小的路径条数覆盖所有的点),关键是如何建图,其实也不难想到,对于当前点,如果后面的点它能够到达,那么就连边。 最小路径覆盖=顶点数-最大匹配。 http://paste.ubuntu.com/5939379/原创 2014-05-26 18:03:07 · 396 阅读 · 0 评论 -
hdu 2413(最大匹配+二分)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2413 思路:由于要求最少的时间,可以考虑二分,然后就是满足在limit时间下,如果地球战舰数目比外星战舰数目多,就连边,然后求最大匹配即可,判断匹配数目是否等于外星球数目,如果相等,说明可以占领,继续二分。 1 #include 2 #include 3 #include 4原创 2014-05-26 18:02:02 · 454 阅读 · 0 评论 -
hdu 4185(最大匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4185 思路:坐标映射建双向图,只要满足条件构成矩阵,就连边,最后求一下最大匹配即可。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define M原创 2014-05-26 18:01:07 · 371 阅读 · 0 评论 -
hdu 1350+hdu 1960(最小路径覆盖)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1350 http://acm.hdu.edu.cn/showproblem.php?pid=1960 思路:最小路径覆盖,即如果两条路线的时间不冲突,那么就连边,最后求一下最大匹配就可以了。 最小路径覆盖=顶点数-最大匹配。 1 #include 2 #include 3 #i原创 2014-05-26 18:01:03 · 389 阅读 · 0 评论 -
hdu 1507(最大匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1507 思路:这题关键是建图,我们可以把坐标映射建双向图,最后求得的最大匹配数/2就ok了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #defin原创 2014-05-26 18:01:05 · 441 阅读 · 0 评论 -
hdu 3335(最小路径覆盖)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3335 思路:有矛盾的条件一般都应该往匹配这方面想: 能够整除的连边,于是答案(最小路径)==|顶点个数|-最大匹配。这儿要注意的地方就是要去掉相同的数(排序一下即可),然后就是hungry算法搞定就可以了。 1 #include 2 #include 3 #include原创 2014-05-26 18:00:21 · 489 阅读 · 0 评论 -
hdu 1528+hdu 1962(最小覆盖)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1528 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1962 思路:求二分图的最小覆盖,最小覆盖=最大匹配; 建图略麻烦。。。 View Code 1 #include 2 const int MAXN=30; 3 using原创 2014-05-26 17:55:20 · 353 阅读 · 0 评论 -
poj 2226(最小覆盖)
题目链接:http://poj.org/problem?id=2226 思路:将连续的横向水洼看成X集合中的一个点,连续的纵向水洼看成Y集合中的一个点,而将每个水点看成一条边,它连接了所在的X集合中的点和Y集合中的点,于是问题就转化为求最小点覆盖了。最小覆盖=最大匹配。 http://paste.ubuntu.com/5942114/原创 2014-05-26 18:03:11 · 446 阅读 · 0 评论 -
hdu 1281
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1281 思路:把棋盘的行x看成二分图左边的点,列y看成二分图右边的点,那么就把可以放车的位置看成是一条边,而二分图的最大匹配中x互不相同,y互不相同,所以每个匹配都是不同行不同列,所以最大匹配就是最多可以放的车的数量。而要判断有多少个点是必须放的,只要在得出最大匹配后,每次去掉一个匹配,再去运算看得出原创 2014-05-26 17:54:42 · 334 阅读 · 0 评论 -
hdu 3468(二分匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3468 大牛思路: 用BFS找出每一个集合点到其它可达点的距离以及这个集合点到下一集合点的距离 枚举是否能从一个集合点K经过一个宝物点X到达下一个集合点(K+1).如果能的话,则path[K][X]=true; 如果发现有一个集合点不可达的话,则输出-1; 1 #include原创 2014-05-26 17:59:26 · 361 阅读 · 0 评论 -
hdu 3861(缩点+最小路径覆盖)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3861 思路:缩点是显然的:What’s more, for each pair of city (u, v), if there is one way to go from u to v and go from v to u, (u, v) have to belong to a same stat原创 2014-05-26 18:00:18 · 487 阅读 · 0 评论 -
hdu 1526(最大匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1526 思路:floyd求传递闭包,然后就是最大匹配了,不过一开始输入没看清,被坑了将近2个小时。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std;原创 2014-05-26 18:01:59 · 430 阅读 · 0 评论 -
hdu 2389(最大匹配bfs版)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2389 思路:纯裸的一个最大匹配题,不过悲摧的是以前一直用的dfs版一直过不了,TLE无数次啊,然后改成bfs就过了。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include原创 2014-05-26 18:01:55 · 522 阅读 · 0 评论 -
hdu 3360(最小覆盖)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3360 思路:最小覆盖==最大匹配。 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 3333 8 vectorint>ve原创 2014-05-26 18:01:51 · 423 阅读 · 0 评论 -
hdu 1845(最大匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1845 思路:匈牙利算法应用,900ms+险过。(好像直接n/2就行) 1 #include 2 #include 3 #include 4 #include 5 #include 6 using namespace std; 7 #define MAXN 5555原创 2014-05-26 18:00:58 · 323 阅读 · 0 评论 -
hdu 2063(最大匹配数)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 二分匹配水题,求最大匹配数(即求边数最多的匹配),匈牙利算法实现。。 View Code 1 #include 2 const int MAXN=507; 3 using namespace std; 4 int k,m,n; 5 int map[MAXN][MAX原创 2014-05-26 17:54:35 · 351 阅读 · 0 评论 -
hdu 2119(最大匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2119 题意很好理解,就是每次可以删除一行或者一列数,问最少几次可以把所有的1都变成0,也就是都删完。用二分图表示,行代表二分图的一部分,列代表二分图的一部分,map[i][j]==1代表连一条边,这样就转化为求最小顶点覆盖,即求二分图的最大匹配(边数最多的匹配,即把尽可能多的边与某一个顶点相关联,这原创 2014-05-26 17:53:24 · 453 阅读 · 0 评论 -
hdu 4160(最小路径覆盖)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4160 思路:最小路径覆盖,如果满足条件:wi j连边,然后就是求最大匹配。 最小路径覆盖=顶点数-最大匹配。 1 #include 2 #include 3 #include 4 #include 5 using namespace std; 6 struct No原创 2014-05-26 18:01:15 · 353 阅读 · 0 评论 -
hdu 2236(最大匹配+枚举上下界)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2236 思路: 引:为了保证每行每列只取一个元素,我们可以从二分图最大匹配的思想入手,把行和列分别看做二分图左右两部分,i-j的边权就是第i行第j列的元素的值。这样构图之后,求得的二分图最大匹配的4条边就是不在同行或同列的4个元素。 有了这个思想时候,我们只需要再保证4个元素中最大值与最小值之差尽原创 2014-05-26 18:00:16 · 285 阅读 · 0 评论 -
hdu 2063+hdu 1083(最大匹配数)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2063 二分匹配水题,求最大匹配数(即求边数最多的匹配),匈牙利算法实现。。 View Code 1 #include 2 const int MAXN=507; 3 using namespace std; 4 int k,m,n; 5 int map[MAXN][MAX原创 2014-05-26 17:54:33 · 411 阅读 · 0 评论