![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
二分匹配
文章平均质量分 67
AcDora
这个作者很懒,什么都没留下…
展开
-
UVa11383 Golden Tiger Claw ( KM )
这是一道二分匹配的副产品题目,题目: N*N的矩阵,每个个格子里面有一个数,w[i][j], 给每一行和每一列分别赋给一个值,使得对于任意格子都有,w[i][j] 要求输出row和col,以及它们的总和的最小值由于KM算法结束后,所有顶标之和就是最小的,这道题没有求最小匹配的值,而是求的可行顶标的值代码如下:#include #include using namespace原创 2013-02-01 21:57:29 · 679 阅读 · 0 评论 -
Uva live 4043 Ants( KM+简单的计算几何)
一定要清楚的一个问题,就是:(如图)两条黑色的线的和一定小于蓝色的和,但是平方的和之间就不一定是这个关系了!代码:#include #include #include #include #include using namespace std;const double INF = 0x7fffffff;const double eps = 1e-9;const i原创 2013-05-26 15:23:19 · 1112 阅读 · 0 评论 -
POJ 2446 Chessboard (二分匹配)
这道题wa了三次很可惜,其实很简单!第一次是RE,32*32=1024,好丢人!第二次是没注意,(x,y)表示y行x列,直接按照原有经验,搞成了x行y列!丢人!第三次是双层for循环,j的那个内层循环只循环到n结束,正确的是应该到m结束!这篇总结必然好好保存,写代码真的要认真!代码:#include #include #include #include using原创 2013-05-08 17:05:38 · 752 阅读 · 0 评论 -
POJ 2771 Guardian of Decency(最大独立点集)
把有可能在一起的连边,求最大独立点集代码:#include #include #include #include #include using namespace std;const int N = 550;struct pupils { int h; string sex; string music; string sport;}P[N]原创 2013-05-08 15:43:55 · 756 阅读 · 0 评论 -
HDU 1151 Air Raid( 最小路径覆盖 )
这道题是很经典的最小路径覆盖问题。最小路径覆盖,是指在有向无环图中,选择最少的点作为起点,使得遍历图中所有的点有且仅有一次。因此,每个单独的顶点可以看做是一条路径。最小路径覆盖=N-原图的最大二分匹配数。代码:#include #include const int N = 150;int n, m;int bmap[N][N], cy[N];bool vis[N];bool原创 2013-05-08 11:17:38 · 835 阅读 · 0 评论 -
HDU 3829 Cat VS Dog (最大独立点集)
这道题,要好好写一下总结。开始的时候,我把猫和狗作为顶点,求最大独立点集,但是后来发现,这个是有问题的。画了一个图,然后模拟了样例2,发现这个边可以重复,也就是说可有不同的小孩的like和dislike是一样的,那么这中情况下,删除一个点,可是多少个孩子高兴就不一定了。于是感觉到这建图是有问题的。仔细分析一下题目,说删除一个孩子不喜欢的动物,会使这个孩子,但是喜欢这个动物的孩子就会不高原创 2013-05-08 09:54:39 · 890 阅读 · 0 评论 -
HDU 1054 Strategic Game (最小顶点覆盖)
刚开始想得难了,打算把二分图建出来,把顶点分开!其实不用,直接对原图求最大匹配,然后除以2.这里刚开始敲模板,把下标弄错了,题目是从0开始,我直接从1开始!还有一件事情,一定一定要记得,就是给bmap初始化!!!!很重要,至关重要的!!!代码:#include #include #include using namespace std;const int N = 1515;原创 2013-05-07 22:27:37 · 1044 阅读 · 0 评论 -
POJ 3692 Kindergarten ( 最大独立点集 )
这道题是求最大独立点集!最大独立点集=N - 最小顶点覆盖=N-最大匹配。反建图,将不认识的连上边!代码:#include #include const int N = 220;int ln, rn, M;int bmap[N][N], cy[N];bool used[N];bool dfs( int u ) { for ( int v = 1; v <=原创 2013-05-07 21:04:05 · 972 阅读 · 0 评论 -
POJ 1274 The Perfect Stall(二分匹配)
水!瞬秒的题目!如有不懂,就看算法吧!但愿这次比赛有这样水的题目,哈哈!代码:#include #include const int N = 220;int ln, rn, bmap[N][N], cy[N];bool used[N];bool dfs( int u ) { for ( int v = 1; v <= rn; ++v ) if ( bmap[u][v原创 2013-05-06 22:11:46 · 738 阅读 · 0 评论 -
POJ 3041 Asteroid (二分匹配模板-二分图最小覆盖)
这道题题是很经典的建模的题目,也是比较基础的二分匹配题目。二分最小覆盖就是说选择尽可能少的点,然后使得每条边至少有一个端点被选中。可以证明的是最小覆盖数就是最大匹配数。代码:#include #include #include using namespace std;const int N = 510;int n, k;int g[N][N], cy[N];bool u原创 2013-05-06 17:44:24 · 1007 阅读 · 0 评论 -
POJ 3020 Antenna Placement (二分匹配)
这道题要求对二分匹配有一个比较详细的了解!同时还要动一点小小的脑筋!和hdu4185是一个建图思想,然后不一样的是,4185里面不要求覆盖所有的点,但是这个题目是要求覆盖所有的点,用少的椭圆!那么很显然,要求一个最大匹配,然后看有几个点没有匹配上的,就在最大匹配的基础上加上几个椭圆!还有,这道题,第一次提交RE了,是因为我把数组最大订到了40,忘记了如果给每个点标记后,一共最多可能有4原创 2013-05-06 21:55:26 · 1122 阅读 · 0 评论 -
HDU 4185 Oil Skimming ( 二分匹配建图 )
这道题最难的部分就是建图,能想到怎么建图,就没有问题了,直接套模板即可。建图:将每个‘#’的格子作为一个节点,和与它相邻的格子连线,构建一个图,求这个图的最大二分匹配!要注意的是,这个图的最大二分匹配,是把所有的‘#’既做为左边,有作为右边,因此,匹配出来的是答案的二倍。即一个点被匹配了两次,因为在建图的过程中,比如(1,2)这条边,它还有对应的(2,1)这条边,仔细看看建图,画一下就懂了!原创 2013-05-06 18:18:27 · 928 阅读 · 0 评论 -
HDU 2389 Rain on Your Parader(二分图匹配Hopcroft-Carp)
这道题目,点数比较多,用匈牙利算法会超时!题目很简答,现在发现二分匹配建图很重要。这道题就是把人和人能在t时间内可以拿到的雨伞连起来即可,一左一右。很傻的错误就是在最后输出的时候,printf函数里面应该是表示数据组号的地方的%d我直接写成1,导致最后结果会变成1 2 3……所以以后写代码还是要注意格式,注意格式的逻辑性和保证思维的清晰度!代码如下:#include #inclu原创 2013-05-06 19:57:11 · 922 阅读 · 0 评论 -
HDU 2819 Swap (最大二分匹配+输出路径)
题目大意就是给出一个矩阵,每个格子里面要么是0, 要么是1;是否能够经过交换(交换行或者列)使得主对角线上都是1。其实就行和列的匹配,左边是行,右边是列,然后如果行列交点是1,那么就可以匹配,看是否为完美匹配,然后输出怎么交换的。开始很蒙的,后来仔细去想,可以这样理解,想要对角线上都是1,那么我们就可以锁定行,来选择列和它匹配,将选择的列移动到和该行形成对角线上是1的位置,比如和第一行匹配的列原创 2013-05-05 19:58:15 · 1272 阅读 · 0 评论 -
HDU 1281 棋盘游戏(最大二分匹配)
还是一样,熟悉模板!然后就是先这个样的题目,同一行活同一列只能有一个子的题目,可以用二分匹配来做,也就是每一行只能陪一列,不能重复!这道题,也是一个一个点试出来的,看看有没有等价边!代码:#include #include #include using namespace std;int const N = 110;int n, m, k, g[N][N];int c原创 2013-05-05 16:40:23 · 822 阅读 · 0 评论 -
HDU 2444 The Accomodation of Students(最大二分匹配(匈牙利算法)+二分图判断->模板题目)
这道题首先判断一下图是不是二部图,如果是的话,就进行二分匹配代码:#include #include #include using namespace std;const int N = 300;int n, m;int color[N];int g[N][N], linker[N];bool used[N];bool dfs( int u ) { int原创 2013-05-05 10:02:54 · 706 阅读 · 0 评论 -
HDU 1083 Courses (二分最大匹配)
这道题很简单,一看知道是二分最大匹配的题目。只要是用来联系模板的。代码:#include #include #include using namespace std;const int LN = 110;const int RN = 310;int ln, rn;int g[LN][RN], cx[LN], cy[RN];//存储相应的匹配bool used[RN];原创 2013-05-05 15:16:25 · 904 阅读 · 0 评论 -
HDU 2255 奔小康赚大钱(KM模板)
打模板一定要注意!#include #include #include #include using namespace std;const int N = 350;const int INF = 0x7fffffff;int n, w[N][N], lx[N], ly[N], le[N];bool S[N], T[N];void update(){ int a原创 2013-05-16 14:59:35 · 882 阅读 · 0 评论 -
hdu 1914 The Stable Marriage Problem(延迟认可算法)
这篇解释得比较好: 点击打开链接稳定婚姻问题:实际上就是n男n女,每个人都对其他异性有一个喜欢值,給他们匹配,然后最后得到他们关系比较稳定的一种方法。其中要使得关系稳定,要满足的条件是两个人中任何一个人都认为自己的配偶是喜欢自己的人中最好,这样如果一个想出轨,一定不会找比自己现任差的,可是比自己现任好的又不会喜欢他,因为人家认为人家的现任要比他好。所以婚姻稳定。算法:简单说就是,原创 2013-08-05 22:02:43 · 1079 阅读 · 0 评论