图论-二分图匹配
文章平均质量分 74
lab104_yifan
这个作者很懒,什么都没留下…
展开
-
HDU 3995 Special Fish(KM最大匹配)
HDU 3995 Special Fish题目链接题意:一些鱼,每只鱼都有一个权值,给一个矩阵,如果mat[i][j] = 1表示i会攻击j,每只鱼可以攻击一次和被攻击一次,每次攻击可以得到权值为val[i]^val[j],问最大能得到多少权值思路:KM最大匹配,每个鱼拆成攻击和被攻击两边,然后连边跑KM最大匹配即可代码:#include #include原创 2014-10-31 19:44:50 · 836 阅读 · 0 评论 -
HDU 2236 无题II(二分图匹配+二分)
HDU 2236 无题II题目链接思路:行列只能一个,想到二分图,然后二分区间长度,枚举下限,就能求出哪些边是能用的,然后建图跑二分图,如果最大匹配等于n就是符合的代码:#include #include #include #include using namespace std;const int N = 105;int t, n, x[N][N]原创 2014-11-01 14:35:30 · 1137 阅读 · 0 评论 -
HDU 2282 Chocolate(KM最大匹配)
HDU 2282 Chocolate题目链接题意:一些盒子排成一圈,每次可以移动一个巧克力到相邻盒子,问最少几步能让每个盒子里面巧克力个数思路:把一个盒子个数大于1的拆成个数 - 1个点,每个点和空盒子连边,跑KM最大匹配即可代码:#include #include #include #include using namespace std;co原创 2014-10-31 20:24:34 · 805 阅读 · 0 评论 -
POJ 2446 Chessboard(二分图匹配)
POJ 2446 Chessboard题目链接题意:给定一个棋盘,上面有洞,问能否完美用1 * 2纸条铺满,纸条不能重叠,不能贴到洞上思路:二分图匹配,求最大独立集,相邻的空白建边即可,然后这题有一个很坑的地方啊,就是输入洞的位置(x, y)居然是先输y再输x,这不合常理坑爹代码:#include #include #include #include原创 2014-10-30 16:38:39 · 519 阅读 · 0 评论 -
HDU 1533 Going Home(KM完美匹配)
HDU 1533 Going Home题目链接题意:就是一个H要对应一个m,使得总曼哈顿距离最小思路:KM完美匹配,由于是要最小,所以边权建负数来处理即可代码:#include #include #include #include using namespace std;const int MAXNODE = 105;typedef int原创 2014-10-30 22:00:54 · 865 阅读 · 0 评论 -
HDU 2255 奔小康赚大钱(KM完美匹配)
HDU 2255 奔小康赚大钱题目链接题意:中文题思路:就是KM的裸题代码:#include #include #include #include using namespace std;const int MAXNODE = 305;typedef int Type;const Type INF = 0x3f3f3f3f;struct原创 2014-10-30 21:29:27 · 690 阅读 · 0 评论 -
POJ 2226 Muddy Fields(最小点覆盖)
POJ 2226 Muddy Fields题目链接题意:给定一个图,要求用纸片去覆盖'*'的位置,纸片可以重叠,但是不能放到'.'的位置,为最少需要几个纸片思路:二分图匹配求最小点覆盖,和放车那题基本一样,就是注意要预处理一下行列,把连续横的'*'当成一行,竖的'*'当成一列,建图跑最小点覆盖即可代码:#include #include #include原创 2014-10-30 18:17:50 · 838 阅读 · 0 评论 -
POJ 1486 Sorting Slides(二分图必须边)
POJ 1486 Sorting Slides题目链接题意:给定一些矩形和一些点,问每个点是否能标识一个矩形(某个点在矩形内就是标识该矩形,每个矩形只能有一个标记点)思路:二分图匹配之后,枚举匹配边,删除后在进行匹配,如果最大匹配数减少,说明这条边是唯一的匹配边,也就是该点一定对应该矩形,输出即可代码:#include #include #include原创 2014-10-29 22:27:59 · 660 阅读 · 0 评论 -
POJ 3692 Kindergarten(最大独立集)
POJ 3692 Kindergarten题目链接题意:一个班级内,男的都互相认识,女的都互相认识,现在有k对男女互相认识,要求选出最多的人,使得他们两两互相认识思路:最大独立集,把不认识的连边,就可以求出最大独立集就是两两互相认识的代码:#include #include #include #include using namespace std;原创 2014-10-30 18:39:42 · 645 阅读 · 0 评论 -
POJ 1548 Robots(最小路径覆盖)
POJ 1548 Robots题目链接题意:乍一看还以为是小白上那题dp,其实不是,就是求一共几个机器人可以覆盖所有路径思路:最小路径覆盖问题,一个点如果在另一个点右下方,就建边,然后跑最小路径覆盖即可代码:#include #include #include #include using namespace std;const int N =原创 2014-10-30 17:04:06 · 1193 阅读 · 0 评论 -
HDU 2448 Mining Station on the Sea(KM最大匹配+floyd)
HDU 2448 Mining Station on the Sea题目链接题意:给定n个港口,m个油田,k行表示油田之间连边关系,p行表示港口和油田之间连边关系,都是无向边,在给定n个船起始在的油田位置,求每个船要开进一个港口,最短的总距离。注意,港口只能进入一次,进入就不能出来了思路:先把油田和港口都连边,利用floyd求出最短路,注意由于港口不能做中转,所以枚举的时候原创 2014-10-31 23:51:52 · 635 阅读 · 0 评论 -
HDU 3523 Image copy detection(KM最大匹配)
HDU 3523 Image copy detection题目链接题意:这题其实题意读懂就简单了,说白了就是1-n放到1-n列,每列的值为每列上数字和该数字的差的绝对值,然后求总和最小思路:就一KM最大匹配代码:#include #include #include #include #include using namespace std;co原创 2014-11-01 23:57:45 · 1160 阅读 · 0 评论 -
HDU 2853 Assignment(KM最大匹配好题)
HDU 2853 Assignment题目链接题意:现在有N个部队和M个任务(M>=N),每个部队完成每个任务有一点的效率,效率越高越好。但是部队已经安排了一定的计划,这时需要我们尽量用最小的变动,使得所有部队效率之和最大。求最小变动的数目和变动后和变动前效率之差。思路:对于如何保证改变最小,没思路,看了别人题解,恍然大悟,表示想法非常机智试想,如果能让原来那些匹配原创 2014-10-31 16:47:19 · 1014 阅读 · 0 评论 -
HDU 3861 The King’s Problem(强连通+二分图最小路径覆盖)
HDU 3861 The King’s Problem题目链接题意:给定一个有向图,求最少划分成几个部分满足下面条件互相可达的点必须分到一个集合一个对点(u, v)必须至少有u可达v或者v可达u一个点只能分到一个集合思路:先强连通缩点,然后二分图匹配求最小路径覆盖代码:#include #include #include #includ原创 2014-10-19 23:30:51 · 903 阅读 · 0 评论 -
HDU 3722 Card Game(KM最大匹配)
HDU 3722 Card Game题目链接题意:给定一些字符串,每次可以选两个a,b出来,a的前缀和b的后缀的最长公共长度就是获得的值,字符串不能重复选,问最大能获得多少值思路:KM最大匹配,两两串建边,跑最大匹配即可代码:#include #include #include #include using namespace std;const原创 2014-10-31 19:21:02 · 940 阅读 · 0 评论 -
HDU 3718 Similarity(KM最大匹配)
HDU 3718 Similarity题目链接题意:给定一个标准答案字符串,然后下面每一行给一个串,要求把字符一种对应一种,要求匹配尽量多思路:显然的KM最大匹配问题,位置对应的字符连边权值+1代码:#include #include #include #include using namespace std;const int MAXNODE原创 2014-10-31 18:58:18 · 987 阅读 · 0 评论 -
HDU 2426 Interesting Housing Problem(KM完美匹配)
HDU 2426 Interesting Housing Problem题目链接题意:n个学生,m个房间,给定一些学生想住房的喜欢度,找一个最优方案使得每个学生分配一个房间,并且使得喜欢度最大,注意这题有个坑,就是学生不会住喜欢度为负的房间思路:很明显的KM最大匹配问题,喜欢度为负直接不连边即可代码:#include #include #include原创 2014-10-31 13:44:48 · 1014 阅读 · 0 评论 -
HDU 3435 A new Graph Game(KM完美匹配)
HDU 3435 A new Graph Game题目链接题意:又是这类求环总和的最小值,一个点只能在一个环上思路:KM完美匹配求解,不过这题点有1000,理论上n^3算法是过不了的,不过也没有更好的方法了,用费用流来做的话也是n^3,而且常数还更大代码:#include #include #include #include using namesp原创 2014-10-31 12:35:03 · 952 阅读 · 0 评论 -
HDU 2813 One fihgt one(KM最大匹配)
HDU 2813 One fihgt one题目链接题意:吕布n个武将,曹操m个,问吕布每个武将参加一场战斗,不能跟同一个武将打,问最小受到伤害思路:显然的KM最大匹配代码:#include #include #include #include #include #include using namespace std;const int M原创 2014-10-31 20:44:43 · 721 阅读 · 0 评论 -
HDU 1853 Cyclic Tour(KM完美匹配)
HDU 1853 Cyclic Tour题目链接题意:一个有向图,边有权值,求把这个图分成几个环,每个点只能属于一个环,使得所有环的权值总和最小,求这个总和思路:KM完美匹配,由于是环,所以每个点出度入度都是1,一个点拆成两个点,出点和入点,每个点只能用一次,这样就满足了二分图匹配,然后用KM完美匹配去就最小权值的匹配即可代码:#include #incl原创 2014-10-31 12:09:40 · 887 阅读 · 0 评论 -
HDU 3488 Tour(KM完美匹配)
HDU 3488 Tour题目链接同HDU1853代码:#include #include #include #include using namespace std;const int MAXNODE = 205;typedef int Type;const Type INF = 0x3f3f3f3f;struct KM { int n;原创 2014-10-31 12:24:22 · 659 阅读 · 0 评论 -
POJ 2724 Purifying Machine(最大独立集)
POJ 2724 Purifying Machine题目链接题意:这题题意有点没看懂,看了别人的题解,给出m串长度为n的01串。有些串中可能包含,这样的串可以表示两个串,为1 和为0。重复的算一种。比如题目中01100011就代表了四个01串001101100011现在我们需要消灭掉所有的01串,消灭方式有两种:1一次消灭一个串。2如果两原创 2014-10-30 12:06:35 · 1012 阅读 · 0 评论 -
POJ 1274 The Perfect Stall(二分图匹配)
POJ 1274 The Perfect Stall题目链接题意:n个奶牛,每个奶牛有一个喜欢的谷仓,每个谷仓只能喂一个奶牛,问最多几个奶牛有得吃思路:二分图最大匹配,很显然代码:#include #include #include using namespace std;const int N = 205;int n, m;vector g原创 2014-10-30 10:40:53 · 648 阅读 · 0 评论 -
POJ 2239 Selecting Courses(二分图匹配)
POJ 2239 Selecting Courses题目链接题意:n个课程,每个课程有一些上课时间,同一时间只能上一门课,计算最大能有多少课程能上上课(每个课程只要有一个上课时间即可)思路:二分图匹配,对应课程时间建边代码:#include #include #include using namespace std;const int N = 30原创 2014-10-30 10:30:37 · 582 阅读 · 0 评论 -
UVA 1411 - Ants(二分图完美匹配)
UVA 1411 - Ants题目链接题意:给定一些黑点白点,要求一个黑点连接一个白点,并且所有线段都不相交思路:二分图完美匹配,权值存负的欧几里得距离,这样的话,相交肯定比不相交权值小,所以做一次完美匹配就可以了代码:#include #include #include #include using namespace std;const in原创 2014-09-04 12:00:49 · 2254 阅读 · 0 评论 -
UVA 1349 - Optimal Bus Route Design(KM完美匹配)
UVA 1349 - Optimal Bus Route Design题目链接题意:给定一些有向带权边,求出把这些边构造成一个个环,总权值最小思路:由于环入度出度为1,所以可以把每个点拆成入度点和出度点,然后建图做一次二分图完美匹配即可,注意这题坑点,有重边代码:#include #include #include #include using na原创 2014-09-25 10:37:59 · 1689 阅读 · 0 评论 -
UVA 11419 - SAM I AM(二分图匹配+最小点覆盖)
UVA 11419 - SAM I AM题目链接题意:给定一个棋盘,上面有一些目标,现在要放炮,一个炮能打一行或一列,问最少放几个炮及放炮位置思路:首先是二分图匹配,每个目标行列建边,做二分图匹配就是最少的放炮位置,至于输出方案,利用最小点覆盖的Konig原理去做,详细证明代码:#include #include #include using name原创 2014-09-03 21:38:03 · 1029 阅读 · 0 评论 -
UVA 12083 - Guardian of Decency(二分图最大匹配)
UVA 12083 - Guardian of Decency题目链接题意:给定一些男女,满足身高差不大于40,喜欢同一种音乐,不喜欢同一种体育项目,并且性别不同,就可能发生关系,现在老师要带一些男女出去玩,要求不能有一对发生关系,问最多能带多少人思路:分男女,把会发生关系的连边,然后做最大匹配,最后n-最大匹配就是最多能带的人代码:#include #i原创 2014-09-03 23:08:26 · 1303 阅读 · 0 评论 -
UVA 1201 - Taxi Cab Scheme(二分图匹配+最小路径覆盖)
UVA 1201 - Taxi Cab Scheme题目链接题意:给定一些乘客,每个乘客需要一个出租车,有一个起始时刻,起点,终点,行走路程为曼哈顿距离,每辆出租车必须在乘客一分钟之前到达,问最少需要几辆出租车思路:如果一辆车载完一个乘客a,能去载乘客b,就连一条有向边,这样做完整个图形成一个DAG,然后要求的最少数量就是最小路径覆盖,利用二分图最大匹配去做,把每个点拆成两原创 2014-09-03 23:52:03 · 1302 阅读 · 0 评论 -
UVA 1514 - Piece it together(二分图匹配+拆点)
UVA 1514 - Piece it together题目链接题意:给定一个棋盘,上面有黑白或者空,现在有一种L型拼图如图,问能否拼出给定图案,拼图不能重叠思路:二分图匹配,拆点,对于每个黑点,拆点两个点,一个和横向连,一个和纵向连,然后进行二分图最大匹配,如果能完美匹配就是正确的代码:原创 2014-09-01 20:55:30 · 1505 阅读 · 0 评论 -
UVA 1175 - Ladies' Choice(稳定婚姻问题)
UVA 1175 - Ladies' Choice题目链接题意:给定n个男人,n个女人,每个人心中对异性都有一个排序,从左往右是最喜欢到最不喜欢,然后现在要求一个稳定匹配,使得n对男女中,不存在男人对其他女人好感度大于配偶且女人对其他男人好感度大于配偶思路:稳定婚姻问题,算法过程如下:男人不断求婚,从最喜欢到最不喜欢,女人每次在求婚人中,选择一个最喜欢的配对,然后抛弃现原创 2014-09-04 15:41:02 · 1351 阅读 · 0 评论 -
UVA 11383 - Golden Tiger Claw(二分图完美匹配扩展)
UVA 11383 - Golden Tiger Claw题目链接题意:给定每列和每行的和,给定一个矩阵,要求每个格子(x, y)的值小于row(i) + col(j),求一种方案,并且所有行列之和的和最小思路:A二分图完美匹配的扩展,行列建二分图,权值为矩阵相应位置的值,做一次KM算法后,所有顶标之和就是最小的代码:#include #include原创 2014-09-04 12:40:55 · 980 阅读 · 0 评论 -
UVA 1045 - The Great Wall Game(二分图完美匹配)
UVA 1045 - The Great Wall Game题目链接题意:给定一个n*n的棋盘,有n个棋子在上面,现在要移动棋子,每一步代价是1,现在要把棋子移动到一行,一列,或者在主副对角线上,问最小代价思路:二分图完美匹配,枚举每种情况,建边,边权为曼哈顿距离,然后km算法做完美匹配算出值即可,由于要求最小值所以边权传负数,这样做出来的值的负就是答案代码:原创 2014-09-04 19:54:41 · 1853 阅读 · 0 评论 -
UVA 10888 - Warehouse(二分图完美匹配)
UVA 10888 - Warehouse题目链接题意:就是推箱子游戏,问最少要几步思路:每个箱子和目标位置建边,权值为负权值,然后进行二分图完美匹配即可,注意不能到达的位置权值应该置为最小代码:#include #include #include #include #include using namespace std;const int原创 2014-09-18 13:18:30 · 1254 阅读 · 0 评论 -
【图论】二分图匹配总结
二分图匹配总结二分图匹配1、二分图最大匹配,求两个集合内,每个元素只能用一次,两集合间存在一些匹配关系,求最大匹配多少对,利用匈牙利算法,对于每个结点不断去找增广路去匹配有几个重要性质:1、最小点覆盖 = 最大匹配2、最大独立集 = 总结点 - 最大匹配模板:bool dfs(int u) { for (int i = 0; i < g[u].原创 2014-11-02 18:58:07 · 1869 阅读 · 0 评论 -
POJ 2536 Gopher II(二分图匹配)
POJ 2536 Gopher II题目链接题意:n个地鼠,m个洞,每个地鼠速度v,如果能在s秒内逃进某个洞就能活,每个洞只能容纳一个地鼠,问最少会死几个地鼠思路:二分图匹配,能跑到的建边,然后求最大匹配,n - 最大匹配就是答案代码:#include #include #include #include using namespace std;原创 2014-10-30 10:09:46 · 677 阅读 · 0 评论 -
POJ 3020 Antenna Placement(二分图匹配)
POJ 3020 Antenna Placement题目链接题意:给定一个地图,'*'的地方要被覆盖上,每次可以用1 x 2的矩形去覆盖,问最少用几个能覆盖思路:二分图匹配求最大独立集,相邻*之间连边,然后求最大独立集即可看这数据范围,用轮廓线dp应该也能搞代码:#include #include #include #include using原创 2014-10-30 16:13:53 · 868 阅读 · 0 评论 -
POJ 1325 Machine Schedule(最小点覆盖)
POJ 1325 Machine Schedule题目链接题意:有两台机器分别有n和m种模式,一开始都在0模式下,现在有k个任务,每个任务要么由a机的x模式要么由b机器的y模式完成,完成前要先调整该机器到该模式,如果有调整则要重启一次机器,任务不分顺序,问最少调整几次能完成思路:每个任务a和b连一条边,这样每个任务只要对应这个匹配边就是一个任务,那么只要求出最小点覆盖,就能原创 2014-10-29 21:27:42 · 596 阅读 · 0 评论 -
POJ 1422 Air Raid(二分图匹配最小路径覆盖)
POJ 1422 Air Raid题目链接题意:给定一个有向图,在这个图上的某些点上放伞兵,可以使伞兵可以走到图上所有的点。且每个点只被一个伞兵走一次。问至少放多少伞兵思路:二分图的最小路径覆盖,每个点拆成两个点,然后根据有向边连边,然后答案为n - 最大匹配数代码:#include #include #include #include using原创 2014-10-29 12:13:38 · 921 阅读 · 0 评论 -
POJ 3216 Repairing Company(最小路径覆盖)
POJ 3216 Repairing Company题目链接题意:有m项任务,每项任务的起始时间,持续时间,和它所在的block已知,且往返每对相邻block之间的时间也知道,问最少需要多少个工人才能完成任务,即x最少是多少思路:先floyd求出每两个block之间的最小距离,然后就是最小路径覆盖问题,一个任务之后能赶到另一个任务就建边代码:#include原创 2014-10-29 16:19:31 · 815 阅读 · 0 评论