![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
二分匹配
最菜的acmer
这个作者很懒,什么都没留下…
展开
-
hdu1281.cpp(匈牙利算法)
这题题目虽然是中文的但是理解题意理解了好久,第一个数字是表示第几个样例第三个数字表示最多能放几个马,第二数字表示有几个棋盘格子去掉了就不能放这么多的马就是直接用匈牙利算法干,理解不了的可以去干hdu2063.#include#include#includeusing namespace std;const int mx = 110;int map[mx][原创 2017-04-29 08:27:11 · 255 阅读 · 0 评论 -
HDU3829-最大独立子集
题解:因为如果两个男孩互相矛盾那么只能取悦其中一人,所以符合二分匹配中最大独立子集=顶点数-匹配数因为是双向的所以要除以2#include#include#include#include#include#includeusing namespace std;const int mx = 505;struct node{ string a,b;}c[mx];原创 2017-12-07 13:19:10 · 349 阅读 · 0 评论 -
HDU - 2255(二分图最大权匹配)
题意:每个村民只能买一间房子,而且买的每间房子出价不同要求最大出价题解:二分图最大权匹配即可#include#include#include#includeusing namespace std;const int mx = 1e3+5;const int inf = 0x3f3f3f3f;int lx[mx],ly[mx];int vx[mx],vy[mx];int y原创 2017-09-03 14:47:11 · 260 阅读 · 0 评论 -
hdu3488-(二分图最小权匹配)
题意:求去掉一些边这个图都是环并且所有的边总权值最小题解:每条边因为是单向的的而且不会匹配到自己那么不管最后怎么匹配肯定都能形成环那么就是二分图最小权匹配#include#include#include#includeusing namespace std;const int inf = 0x3f3f3f3f;const int mx = 205;int g[mx][mx],原创 2017-09-03 14:45:06 · 348 阅读 · 0 评论 -
POJ - 3189(二分多重匹配)
题意:有n头牛,B个谷场,牛对每个谷场的喜爱都有不同的排名,每个谷场承受牛的上限,然后求这些放置后这些牛对这些谷场的排名范围大小最小。题解:二分范围大小mid,然后求每个范围牛是否能否多重匹配成功即可。#include#include#include#includeusing namespace std;const int mx = 1e3+5;int g[mx][mx];i原创 2017-09-01 16:19:32 · 649 阅读 · 0 评论 -
POJ -2112(二分多重匹配)
题意:给你K台机器,C头牛,每台机器最多承受M头牛,然后k+C行表示机器到牛的距离,牛到机器的距离,如果距离是0的话表示这两个点道路不存在,要求所有牛到机器中的距离最大值最小题解:Floyd一下K+C个点之间所有的最短距离,最后距离二分一下,然后就是二分多重匹配在距离的限制下是否可以都匹配成功#include#include#include#includeusing namespa原创 2017-09-01 16:14:23 · 362 阅读 · 0 评论 -
poj2289(二分多重匹配)
题解:二分上限mid,然后看匹配的这个值上限了没有,如果没有就直接把这个值加进去,如果上限了就查找里面存的数还有没有其他能匹配的,然后用这个上限值mid能不能都匹配成功,即可#include#include#include#include#includeusing namespace std;bool inline read(int &x){ x = 0; char原创 2017-08-31 22:52:01 · 617 阅读 · 0 评论 -
HDU6105-二分匹配
题解:只有当bob把图切成所有端点有且只有一条边的时候bob才有可能赢所以当bob所有的点都有匹配并且点为偶数,同时要满足k>=n-1-n/2才能赢所以直接二分匹配再判断一下就可以了#include<iostream>#include<cstring>#include<cstdio>#include<algorithm>#include<set>#include<vector>using原创 2017-08-10 20:26:05 · 406 阅读 · 0 评论 -
LightOJ - 1356 质因数分解+最大独立子集
题解思路:因为题目说有一个数除以另外一个数如果等于一个素数的话就只能一个加入集合,那么这两个数矛盾并且可以构成一个二分图,就是求二分图的最大独立子集,然后如何快速的求这些数相互矛盾呢? 把这些数拆分成看有多少个不同的素数并且除以素数,然后看下有没有在出现过,如果有就两个位置上加入一条无向边即可。最后就是跑一遍HK就可以了。#include<iostream>#include<cstring>#原创 2017-08-09 15:08:10 · 410 阅读 · 0 评论 -
HDU - 4685(完美匹配构图+强连通)
题解:做这题前建议先去做poj1904他的题目已经是完美匹配了直接强连通算,然后这题难在构造完美匹配的图,如何构造呢?先求原始图的最大匹配cnt数然后加入m-cnt个王子匹配工作这些王子喜欢所有的公主然后加入n-cnt个公主这些公主被所有的王子喜欢然后再求一次完美匹配那么就是按poj1904的方法:如果王子(u)喜欢这个公主(v)就建一个u->v的有向边如果公主可以嫁给这个王子就连上v->u的有向边原创 2017-07-19 18:29:28 · 711 阅读 · 0 评论 -
hdu2389-二分匹配HK算法
题意:就是将在t秒后下雨然后给你n个人的坐标和速度m把伞的坐标然后求最多可以有几个人拿到伞题解思路:求出哪个人可以和哪把伞匹配后就是二分最大匹配但是用匈牙利算法肯定会超时那么此时就要用HK算法优化一下即可#include<iostream>#include<cmath>#include<cstring>#include<algorithm>#include<cstdio>#include<原创 2017-07-13 16:33:09 · 327 阅读 · 0 评论 -
worldfinal2017-C(二分最大匹配)
题目大意:箱子可以任意移动然后如何移动可以从三个面不看从而偷走最大数量的箱子数 题解思路:如果有 30 20 20 10 这样最优的方案是把左下的箱子数和右下的箱子数互换然后再偷方案最优也就是每一个最大的箱子数可以同时占掉一行和一列的最大箱子数 那么就是二分最大匹配求最多每一个最大的箱子数可以同时占掉一行和一列的最大箱子数,之后其他位置没被占用到的只能占一行或者一列然后其他的箱子可以偷得只原创 2017-05-27 09:03:51 · 631 阅读 · 0 评论 -
落谷P4728(最大二分匹配)
题解思路:我们把数组这些元素看成点然后两个点之间一条有向边的前提为i<j,a[i]<a[j],那么这样题目就变成了找两条路径把所有的点都盖上去那么就是有向图的最小路径覆盖问题,判断路径数是否小于2#include<bits/stdc++.h>using namespace std;const int mx = 2e3+5;const int inf = 0x3f...原创 2019-02-28 19:49:21 · 209 阅读 · 0 评论