二分图相关
文章平均质量分 73
九野的博客
这个作者很懒,什么都没留下…
展开
-
CSU 1531 Jewelry Exhibition 二分匹配(裸
题目链接:点击打开链接题意:给定[0,n] * [0,m]的二维矩阵矩阵内有k个绿点下面k行给出绿点坐标,(保证给出的坐标都不是整数且 0 问:用宽度为1的刷子,一次可以把一行染色或者把一列染色问最少要使用几次刷子思路:二分匹配,把所有点都映射到该点所在的方格的左下角坐标里(即舍弃小数部分)然后就是一道经典的行列匹配,和排兵布阵一样做法。#inclu原创 2015-03-28 09:43:30 · 1289 阅读 · 0 评论 -
HDU 3829 最大du立集=2个点集点数-最大匹配数
#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;#define mod 1000000007#define N 505int lef[N], pn;//lef[v]表示Y集的点v 当前连接的点 , pn为原创 2014-04-21 18:49:56 · 1591 阅读 · 0 评论 -
二分匹配相关
文章链接:点击打开链接转载 2014-07-19 14:55:53 · 1040 阅读 · 0 评论 -
HDU 2119 Matrix 简单二分匹配
行做x集,列做y集,1就给该行该列连一条边,输出最大匹配边即可#include#include#include#include#include#includeusing namespace std;#define N 105int lef[N], pn;//lef[v]表示Y集的点v 当前连接的点 , pn为x点集的点数bool T[N]; //T[u] 表示Y集 u原创 2014-07-19 15:26:27 · 1243 阅读 · 0 评论 -
URAL 2017 Best of a bad lot 二分图染色 使x集点数最少
题目链接:点击打开链接题意:有n个嫌疑犯。[1,n]第i行表示第i个嫌疑犯说案发时他所在的地名,后面一个数m表示当时他看到m个人,后面m个数表示他看到的人。找出最小的犯罪团体(即多数人都是好人原则)若大家都是好人则随便输出一个人当坏人==思路:当一个人x被2个不同地方的人u, v看到时,则u v其中一个一定是犯人。所以u-v建一条边。然后二分图染色使得x点集点数原创 2014-12-09 16:59:43 · 1607 阅读 · 0 评论 -
CodeForces 468B Two Sets 二分匹配
题目链接:点击打开链接题意:给定n个数,常数a, b把n个数放到集合A和集合B使得:对于某个数x,若x在A集合则 a-x也必须在A集合(若a-x不存在于n个数中,则x不能放在A集合)放在B集合同理。输出任意解:每个数放在哪个集合里(允许n个数都放一个集合)思路:类似二分匹配的做法。import java.io.PrintWriter;import ja原创 2014-12-21 13:04:38 · 2184 阅读 · 0 评论 -
HNU 13103 Easy Delete 最小点覆盖=最大匹配数
题目链接:点击打开链接Easy DeleteTime Limit: 1000ms, Special Time Limit:2500ms, Memory Limit:65536KBTotal submit users: 8, Accepted users: 4Problem 13103 : No special judgement原创 2014-11-28 18:19:20 · 1338 阅读 · 0 评论 -
无权边二分图的 二分匹配 模版及解析
int lef[N*N];//lef[v]表示右边点v 当前连接的点bool T[N*N];//右边的点是否连过vectorG[N];G是映射,G[X集].push_back(Y集)bool match(int x){ for(int i=0;i<G[x].size();i++) { int v=G[x][i]; if(!T[v]) { T[v原创 2013-09-03 11:26:01 · 2182 阅读 · 0 评论 -
URAL 1949 The Best Picture in the Galaxy 二分匹配 求字典序最小解
题目链接:点击打开链接 点击打开链接题意:给定n部电影k个学生下面n行给出每部电影的开映时间,结束时间,女演员的个数。若一个学生看了一部电影,接下来想看另一部电影必须满足:1、两部电影时间不能重合,即后面那部的开映时间>=前面那部的结束时间2、女演员数量不能比之前看的少问:k个学生最多能看多少部电影。以二进制输出。若有多种方案输出字典序最小解思路:二原创 2014-11-28 11:06:01 · 1498 阅读 · 0 评论 -
UVALive 6525 Attacking rooks 二分匹配 经典题
题目链接:点击打开链接题意:给定n*n的棋盘,可以在'.'上摆 象棋中的车(X是墙壁)使得任意两个车都不能互相攻击到问:最多能摆多少个车。思路:二分匹配1、若没有X,那么做法就是 X点集为行,Y点集为列,对于图上的每个点所在的行和列(x,y) 建一条边 x->y2、有了X,那么对于每个点所在的上方能接触到的X必须各不相同,所以给每个X标号,第一个X标记成n+1原创 2014-10-30 00:15:37 · 1619 阅读 · 0 评论 -
UVALive 6198 A Terribly Grimm Problem 二分匹配 求字典序最小解
题目链接:点击打开链接题意:给定一个区间[l,r]每个数都选择他的其中一个因子。使得任意两个数选择的因子各不相同,且字典序最小。思路:先对每个数分解质因数。然后从l开始枚举,让i选择最小的因子,判断 [i+1,r]是否有可行解,若有则让i选择这个因子。如此枚举下去即可==复杂度不能直视#include#include#include#inclu原创 2014-11-15 22:34:32 · 1386 阅读 · 0 评论 -
NWERC 2011 ABCDEH 题解
A:SPOJ NWERC11A A - Binomial coefficients题解:点击打开链接B: 点击打开链接 Bird tree从下到上发现是个gcd的过程(辗转相除#include #include #include using namespace std;int main() { int T; scanf("%d", &T);原创 2014-07-15 00:13:01 · 2332 阅读 · 0 评论 -
POJ 1274 The Perfect Stall 水二分匹配
题目链接:点击打开链接嘿嘿#include#include#include#include#include#include#include#define N 2011using namespace std;int lef[N], pn;//lef[v]表示Y集的点v 当前连接的点 , pn为x点集的点数bool T[N]; //T[u] 表示Y集 u 是否已连原创 2014-07-20 12:26:12 · 1119 阅读 · 0 评论 -
POJ 1719 Shooting Contest 二分匹配
题目链接:点击打开链接给定n*m的矩阵给定每列能匹配的2个行号求一组解使得每列都匹配了一行,每行至少匹配一列输出每列匹配的行号思路:先求个每行每列匹配的解,然后套上列空缺的#include#include#include#include#include#includeusing namespace std;#define N 2020int lef[N]原创 2014-07-21 10:33:07 · 1158 阅读 · 0 评论 -
HDU 1507 1*2格子铺矩阵 二分匹配坐标点
题意:给定n*m的矩阵z个点下面z个点坐标表示坏点(无法铺设)问最多铺设几个1*2的方格,并输出这些方格的匹配边 思路:用二分匹配,每一个匹配表示2个坐标相连2个坐标相连就是这2个坐标组成一个1*2的方格 把 能组成方格的2个坐标 建边注意2维坐标1维化 i*M+j M>100 lef[x] = v 这个数组记录 匹配边 输出x v 就是答案原创 2013-10-15 12:16:29 · 2270 阅读 · 2 评论 -
POJ 2594 最小路径覆盖 二分匹配
n个点 m条有向边下面m条有向边问至少多少条路径可以把n个点都覆盖( 注意1个单独的点就是一条路径) 显然路径可以合并, 即传递闭包一样, 如: 所有点都在一条单向边上, 那么把所有路径合并就是1条路径 , 这样只需一条路径就可以覆盖所有点 ( 路径可拆可闭) 注意因为用floyd合并了所有路径, 在最后加边时,边数最大为 N*N 条 #include#原创 2013-10-17 20:07:09 · 1644 阅读 · 0 评论 -
HDU 2819 矩阵交换列使得主对角线都为1 二分匹配
给定矩阵,通过行变换或列变换使得主对角线元素都为1 对于矩阵,只需要 只使用列变换 或 只使用行变换 操作即可得到结果输出列变换的 哪2列进行交换,按字典序 #include#include#include#include#define N 206using namespace std;int n;int lef[N], pn;//lef[v原创 2013-10-16 23:41:22 · 2512 阅读 · 0 评论 -
POJ 3020 最小路径覆盖 = 顶点数-最大匹配数 二分匹配
题意:t个测试数据, n*m 的矩阵用1*2的格子覆盖 所有 * (1*2格子可重叠) 问最少需要多少个 此题和1507同出一辙,修改一下就可以了, 图中'O' 相当于1507中的坏点 答案则是1507的答案加上未使用的白点数 注意因为建的是无向二分图,最大匹配数结果是翻倍的 #include#include#include#include原创 2013-10-17 18:17:09 · 1774 阅读 · 0 评论 -
HDU 3729 二分匹配 反向匹配
题意:给定 n个学生 说的自己考试排名确定最多几个人说真话如果有多种答案,输出字典序最大的那种( 要求字典序最大,所以solve中从最大字典序开始匹配) 思路:题目给定 点 映射到 数轴的区间 上, 问最多多少点可以成功映射到数轴上很显然 点就是 x集 , 整个数轴 就是 y集 , 点对应的整个区间就是映射的边 ,所以直接有了一个二分图 #原创 2013-10-16 09:06:11 · 1542 阅读 · 0 评论 -
HDU 1498 坐标轴二分匹配
给定n k下面n*n的矩阵,每个格子用一个数字表示气球一种颜色每次选择一行或一列爆破 同行(列) 的同色气球排序输出: 选择k次仍不能全部爆完的气球颜色 思路:对于一种颜色把该颜色所有的点坐标(i,j) 建边匹配出一个i,j 表示 x轴坐标i被匹配了 当所有x轴坐标被匹配时,就是所有气球被爆破了这样得到的匹配数就是 这种颜色需要爆破的次数若次数>k 则输原创 2013-10-14 20:19:22 · 1530 阅读 · 0 评论 -
二分图最大匹配总结 -- 转自bin神
文章出处:http://www.cnblogs.com/kuangbin/archive/2012/08/26/2657446.html二分图匹配(匈牙利算法)1。一个二分图中的最大匹配数等于这个图中的最小点覆盖数König定理是一个二分图中很重要的定理,它的意思是,一个二分图中的最大匹配数等于这个图中的最小点覆盖数。如果你还不知道什么是最小点覆盖,我也在这里说一下:假如选了一个点就相转载 2013-10-17 16:05:16 · 1265 阅读 · 0 评论 -
HDU 1150 && HDU 1151 二分匹配模版题
注意一下点集的范围是1开始的即可 #include #include #include #include #include #include #include #include #include #include #include #define N 200#de原创 2013-10-01 21:28:33 · 1608 阅读 · 0 评论 -
HDU 1281
输出case,最大匹配数,和特别边的的数量(特别边就是去这条边后最大匹配会减少)基础的二分匹配这里max就是这个图的最大匹配边数 #includeusing namespace std;#define MAX 1010bool map[MAX][MAX]={false};int match[MAX]={0};bool visit[MAX]={0};bool dfs(int转载 2013-07-24 22:27:48 · 1227 阅读 · 0 评论 -
HDU 2236 矩阵不同行列寻找 最小最大数的差值 最小 二分匹配+二分枚举区间
题意:从矩阵每行中找一个数( 没有2个数在同一列 ) 使得找出来的数中最大值和最小值差 最小, 输出差值 首先设矩阵中最小的数是 vmin , 最大的数是 vmax, 则答案一定 [0, vmax - vmin] 显然找出来的数一定在 区间 [ 0 + x, 0 + ans + x ] ( x为合法值) 枚举x,如果能找到匹配出的结果 都是在这个区间上,说明这个区间合法原创 2013-10-20 21:01:41 · 2538 阅读 · 2 评论 -
HDU 2458 最大团个数=顶点数 - 补图最大匹配数 二分匹配
题意:给定女孩人数,男孩人数,m个边下面m条边 u-v 表示u女孩和v男孩相互认识男孩们都认识每个男孩,女孩们都认识每个女孩求其中最多有多少人 两两互相认识很显然是求最大团最大团 = 补图的最大独立集最小覆盖数+最大独立集 = 顶点数在二分图中 最小覆盖数 = 最大匹配数显然这里补图一定是一个二分图二分匹配裸题:#include#i原创 2013-10-20 22:03:51 · 2462 阅读 · 0 评论 -
HDU 4185 二分匹配 1*2方格个数
题意:问'##' 这样最多有几个相邻 与之前的 用1*2铺矩阵题目一样,把所有非#的点改成坏点,水过#include #include #include #include #include #include #include #include #include #define N 202#define M 201using name原创 2013-10-21 12:01:15 · 1593 阅读 · 0 评论 -
HDU 3036 Escape 网格图多人逃生 网络流||二分匹配 建图技巧
题意:每个' . '有一个姑娘, E是出口,'.'是空地 , 'X‘ 是墙。每秒钟每个姑娘可以走一步(上下左右)每秒钟每个出口只能出去一个人给定n*m的地图, 时限T问所有姑娘能否在T秒内逃生,若能输出最小值,不能输出"impossible"思路:显然是二分答案+网络流判可行。因为每个出口每秒钟只能出去一个人,那么就把每个出口按时间拆点,则T秒钟就拆成T个点。原创 2014-05-03 22:34:20 · 2192 阅读 · 0 评论 -
LA 3989 稳定婚姻匹配
题意:T个测试数据一个n*n矩阵[i,j] 表示i男喜欢j女的程度问:一个匹配使得婚姻稳定(如果存在一对不是夫妻但比喜欢当前的对偶更喜欢对方,则他们会在一起,这样得到的匹配是不稳定的) #include#include#include#includeusing namespace std;#define N 1010#define next ne原创 2014-02-23 23:21:42 · 1563 阅读 · 0 评论 -
Uva 1514 && spoj 9890 拆点匹配L模板 + 时间戳优化
题目链接: http://www.spoj.com/problems/NWERC11D/Piece it togetherTom has developed a special kind of puzzle: it involves a whole bunch of identical puzzle pieces. The pieces have the shape of three ad原创 2013-10-27 10:56:57 · 2956 阅读 · 0 评论 -
HDU 3468 BFS + 二分匹配
开始建图打搓了,参考了大牛的题解打的版本比较清爽题意:给定n,m表示下面地图大小.表示空地 #表示墙 *表示黄金 行走的路线是A->Z->a->z 规则,必须从字母依次走最短路到下一个字母(字母必须连续走,如果走不到下一个字母或者地图上不存在下一个字母则输出-1)每次走到下一个字母可以取走路途上的一个黄金,问最多能取走几个黄金 思路:走到最后一个字母就结束了,所以希望从原创 2013-09-03 11:17:12 · 2378 阅读 · 0 评论 -
POJ 2942 圆桌骑士 点双连通+二分图判定
#include#include#include#include#include#include#include#include#define N 1005#define M 1000005using namespace std;struct Edge{ int from, to;};int n, m;int pre[N], is原创 2014-01-14 19:10:56 · 1799 阅读 · 0 评论 -
HDU 3605 二分图的多重匹配 || 状压网络流
n个人m个星球,下面 n*m 的矩阵i行第j个 为1 表示 第i人能住在j星球 为0表示不能居住 最后一行m个表示该星球容量问是不是所有人都能住在m个星球里 这个题最大流比较好想 二分图建图:n个人建x集 , 矩阵直接做映射边, m个星球因为非单一匹配,所以用栈 这里需要一个优化就是,如果第i人不能居住了 , 直接跳出匹配算法,输出NO原创 2013-10-17 21:44:19 · 2220 阅读 · 0 评论 -
HDU 4751 交叉染色判断二分图
修改后的题意是:n个点,下面n行i行表示与i点相连的单向边,为0表示该行输入结束问: 把点分到2个图中,每个图都要保证是完全图能否做到贴个学长的代码#include#include#include#includeusing namespace std;//const int inf = 1000000000;const int N = 500;con原创 2013-09-21 18:00:47 · 2415 阅读 · 0 评论 -
POJ 1087 && HDU 1526 传递闭包+二分匹配
题意:n种插座(每种1个) m个人名 及他所用的插头 k个转换器 可以把前一个插头转换成后一个插头 ( 转换器无限) 问:最少几个人没得用 思路:二分匹配裸题注意 Floyd 时求的矩阵大小是字符串总个数, k个转换器可能出现前面没有出现的名字 #include#include#define N 2050inline int Ma原创 2013-10-22 22:30:22 · 2073 阅读 · 0 评论 -
ZOJ 3460 二分 + 二分匹配
题意:n个炮塔 m个目标 炮弹装填时间t1 炮塔CD时间t2 炮弹速度m个目标坐标n个炮塔坐标问最少需要多少时间打爆所有目标 思路:二分查找需要的时间, 对于一个时间,二分匹配判断是否存在这样时间内的打击可以打爆所有炮塔 此时注意 炮塔可能打好几个目标,所以把炮塔拆成不同时间的炮塔因为炮塔出导弹的时间是固定的,所以可以确定 tt [ i ] [ j ]表示原创 2013-10-21 22:23:04 · 1482 阅读 · 0 评论 -
HDU 4160 最小路径覆盖 = 顶点数 - 最大匹配数 二分匹配
题意:n个箱子下面n行 a b c 表示箱子的长宽高箱子可以嵌套,里面的箱子三维都要小于外面的箱子问: 露在外头的箱子有几个 思路:只要成功匹配一条边,就等价于成功嵌套一个箱子,就是匹配一条边,露在外面的箱子就少一个结果就是 n - 最大匹配数 注意一个条件: 箱子不可旋转,即 长对应长, 宽对应宽然后就是一个裸的二分匹配 #include#原创 2013-10-21 11:32:49 · 1821 阅读 · 0 评论 -
HDU 2444
裸裸地如题,直接上码#include #include #include #includeusing namespace std; #define maxn 250 int map[maxn][maxn],room[maxn],match[maxn]; int vis[maxn]; int n,m;int Different( int x ){if(x==1原创 2013-07-24 22:25:43 · 1313 阅读 · 0 评论