![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
二分图
银之夏雪
这个作者很懒,什么都没留下…
展开
-
hdu2768Cat VS Dog(最大独立集)
这个题目就是把喜欢猫的和喜欢狗的分开,然后用结构体表示一下喜欢和讨厌,这个地方用的string,方便以后判断相等的地方,把喜欢猫里面不喜欢狗和喜欢狗的相比找一样的,或者喜欢猫里和讨厌猫相比找一样的,然后建边,求最大独立集就是总的点数-最大匹配数#include <iostream> #include <string.h> #include <stdio.h> using namespace std;原创 2016-04-27 15:20:45 · 603 阅读 · 0 评论 -
hdu4751Divide Groups(二分图染色判断)
这个题就是把不认识的连线,然后二分图,这里可能有与两个集合都认识的人,那我们就不必关心他,无所谓的,反正去哪边都行,但是还是得从头开始遍历,为什么会这样呢,因为可能是非连通图,但是和那些和两个集合都认识的人有关吗,答案当然是NO,那么问题到底出现在了哪里呢,比如1-2,3-4表示1和2不认识,3和4不认识,然后你从1开始遍历,发现3,4没遍历到,就是这样#include <iostream> #in原创 2016-04-22 22:03:44 · 402 阅读 · 0 评论 -
poj2195Going Home(费用流或KM算法)
这道题目是比较简单的模板题,我用了两种方法写了一下,需要注意的是用KM算法写的时候,因为这个算法本身求得是二分图最大权匹配,而这道题求的是最小,那么应该在加边的时候把权值乘负一#include <iostream> #include <stdio.h> #include <stdlib.h> #include<string.h> #include<algorithm> #include<math.h原创 2016-09-12 19:15:29 · 430 阅读 · 0 评论 -
hdu2444The Accomodation of Students(二分图判断+最大匹配)
这道题虽然是二分图,但我还是用网络流写的#include <iostream> #include <stdio.h> #include <string.h> #include <queue> using namespace std; const int oo=1e9; const int mm=131111; const int mn=999; int node,src,dest,edge,n,m,原创 2016-04-24 17:50:33 · 332 阅读 · 0 评论 -
poj2594(最小路径覆盖 + floyd)
下面写一下邝斌模板上的东西 1.一个二分图中的最大匹配数等于这个图中的最小点覆盖数 2.最小路径覆盖=点的总和-最大匹配数 3.二分图最大独立集=顶点数-二分图最大匹配 这个题目刚开始我也没想到还要用floyd(传递闭包),后来发现这个题目每个点可以走多次,可能1到2,2到3,这种应该再加一条1到3的边,代码如下#include <iostream> #include <string.h>原创 2016-04-21 19:52:19 · 447 阅读 · 0 评论 -
uva11383(KM算法)
这道题是根据一个n*n的矩阵每个格子里有一个正整数w(i,j)你的任务是确定每行一个整数row(i)每列一个整数col(i),对每个格子都有w(i,j)<=row(i)+col(j)所有row(i)和col(i)和尽量小。思路:本题利用KM算法l(x)+l(y)>=w(x,y)的性质直接可以知道得出的顶标之和即为最小的。#include <iostream> #include <stdio.h> #原创 2016-05-04 14:59:37 · 487 阅读 · 0 评论 -
ZOJ3460 Missile 二分图(拆点)+二分
这个题其实就是n个塔,每个塔最多发射m次火箭,击中m个目标,每个塔只能同时发射一枚火箭准备时间是t1s,发射时间是t2min,注意单位,这块比较坑,然后塔和目标分成两个集合建立二分图,把塔拆点成m个,然后就可以做了,我今天犯得最大的毛病就是全局变量定义m,n之后,在主函数里又定义了,结果出现了问题,输出为最大值,真是无语了#include <iostream> #include <math.h> #原创 2016-04-28 22:16:07 · 402 阅读 · 0 评论 -
hdu5093Battle ships(二分图)
这个题目刚开始看根本开不出来是二分图,后来问了别人看了题解才搞懂,这个题是按照行和列再加上冰山然后分区域,然后因为行列不能挨着,所以把他们分成两个集合,然后一匹配就出来了#include <iostream> #include <string.h> #include <stdio.h> using namespace std; const int MAXN =60; const int MAXM =原创 2016-04-27 21:39:03 · 334 阅读 · 0 评论 -
hdu5090Game with Pearls(二分图匹配)
这道题目其实应该是可以用模拟写的,但是后来发现可以用二分图来解决,就写了一发,结果一直wa了一晚上,后来发现比如说1,2,3,4,5,5,我是按值进行加边的,结果5只加了一轮边,所以匹配数无论怎么算最多也只可能是5,(本来是打算哈希一下之类的,后来发现了更好的办法),这个时候我们就不能按照权值来加边了,要用点加边,这样就能保证每个点至少加了一次#include <iostream> #include原创 2016-10-13 12:34:36 · 278 阅读 · 0 评论