随笔分类 - 图论——二分图 (KM)
摘要:Gale-Shapley算法来源:刘进的日志Gale-Shapley算法近来学习了很有趣的Gale-Shapley算法,又名求婚-拒绝算法。n个男人和n个女人相互配对。每个男人m对所有的女人排名,如果m给w的排名高于w’,就说m偏爱w超过w’。把m的按顺序的排名作为他的优先表。类似的,每个女人也对所有的男人排名。要求求他们的一个稳定匹配。所谓稳定匹配是这样的:给定一个完美匹配S,如果在S中存在两个对(m,w),(m’,w’),其中m更爱w’,且w’更爱m,那么配对(m,w’)就是一个不稳定的因素,他们原来的婚姻都将不稳定。我们的目标就是建立一个不含有上述不稳定因素的配对集合。算法如下:初始所有
阅读全文
摘要:http://poj.org/problem?id=3487题目:有N位女士和N位男士,每位男士或者女士都对对方有个评价。他们会形成N对夫妻,如果A和a结婚,B和b结婚,但是A更偏爱b而非a而且b也更偏爱A而非B,那么这种婚姻是不稳定的 ,求 一个稳定的 婚姻 配对。题目要求是男士优先,也就是男士优先表白,肯定会从最喜欢的开始表白,如果对方没有男友或者表白的男士优于当前男友,就会抛弃原来的男友,而接受表白的男士,男士也成功脱光。否则男士会被拒绝,便只能考虑下一个喜欢的女士。直到所有人都脱光,不存在拒绝情况为止。 队列实现,将自由男一个个拿出来,寻找女士一个个进行匹配。 感觉上先表白的男士会沾光
阅读全文
摘要:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=239337这个题普通的方法或打表就可以过,在这里主要是用最小路径覆盖思想解一下。这题需要转化一下,将问题从求m根柱子最多能放多少球,变为,n个球最少 需要多少柱子。如果对i<j,i + j 为完全平方数,则有一条从i到j的有向边,就变成了求图的最小路径覆盖。这时候只要在预处理中把最小路径覆盖小于50的全部算出来就可以了。 求最 小路径覆盖一般是转化为求图的二分匹配,但是要对图进行一些转化,构造一个新图。将节点i分裂为两个节点i, i',如果原图中有从i到j的节点
阅读全文
摘要:poj.org/problem?id=1325题意:有A和B两种机器,A机器有n种状态,B机器有m种状态。现在有k个需要加工的材料,每种材料可以用A机器的x状态或者是B机器的y状态加工完成,问药加工完所有的材料,需最少改变A和B的多少次状态。A和B的初始状态都为0。题解:最大匹配, 对于 任务 k 若 a 的状态是 i b 的状态是 j 则 i -> j这样 每一个任务 表示 一条狐,要完成 所有的任务 且 重启次数最小 ,即求 最小点覆盖。注意 :一开始的时候机器的状太 为 0 ,所以 遇到 状态为0 的 任务可以 过滤掉 1#include<cstdio>2#includ
阅读全文
摘要:http://poj.org/problem?id=2060题意:出租车公司有n个预约, 每个预约有时间和地点, 地点分布在二维整数坐标系上, 地点之间的行驶时间为两点间的曼哈顿距离(|x1 - x2| + |y1 - y2|)。一辆车可以在运完一个乘客后运另一个乘客, 条件是此车要在预约开始前一分钟之前到达出发地, 问最少需要几辆车搞定所有预约。题解:这道题很容易 看出来 求的就是一个 最小路径覆盖。对于乘客 i 和 j 若 t[i] + 他们的距离 《 s[j] 则 i-> j;建完图后求最小路径覆盖即可。1#include<cstdio>2#include<cst
阅读全文
摘要:http://poj.org/problem?id=1422题意:一个地图上有n个小镇,以及连接着其中两个小镇的有向边,而且这些边无法形成回路。现在选择一些小镇空降士兵(1个小镇最多1个士兵),士兵能沿着边走到尽头,问最少空降几个士兵,能遍历完所有的小镇。题解:一看这道题,求的是最少的路径覆盖住所有点。二分图的最小路径覆盖,就是在图中 找一些路径,使其覆盖主所有的点,而且每个点只属于一条路径,如果把这些路径中的每条路径从它的起始点走到它的终点,那么恰好可以经过图中的每个顶点一次且仅一次);解决此类问题可以建立一个二分图模型。把所有顶点i拆成两个:X结点集中的i和Y结点集中的i',如果有
阅读全文
摘要:http://poj.org/problem?id=2226题意:农夫John的养牛场,是一个R 行C 列的矩形,一场大雨后,养牛场低洼的地方都有了积水。John 的牛都很娇贵的,他们吃草的时候,不想把他们的蹄子给弄脏了。为了不让牛儿们把它们的蹄子弄脏,John 决定把有水的地方铺上木板(木板可以重叠)。他的木板是宽度为1,长度没有限制的。Sample: 4 4 *.*. .*** ***. ..*.题解 :看到这个题感觉一个题很像,原来就是黑书上的 “皇家卫士” ,因为要用最少的木板,所以我们要 ,使木板最长,把行里面连在一起的坑连起来视为一个点,即一块横木板,编上序号,Sample则转..
阅读全文
摘要:http://poj.org/problem?id=1466题意:一些 boys 和girls 有暧昧关系,我们要选出 一些人,这些人 任意两个人之间没有暧昧 关系,求最多可以选出 多少人。 题解:最大独立集,这里建的是双向图,所以,最大匹配要除以 2;1#include<cstdio>2#include<cstring>3#include<cmath>4#include<iostream>5#include<algorithm>6#include<set>7#include<map>8#include<
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=1281 将所有的行 看成几何 x 所有的列看成几何 y 若 (i,j)可以放 一个车的话,那么,我们就将 i -》j 连线,因为 每一行只能放一个 车 ,每一列也只能放一个车,所以,最大匹配,及为所能放的最多上网车;然后 我们枚举每一个可以放 车的 点,就可以知道是否这个点是 否是必须的。1#include<cstdio>2#include<cstring>3#include<cmath>4#include<iostream>5#include<algor
阅读全文
摘要:http://poj.org/problem?id=3041题意:给你N*N的矩阵,里面有的方格里有小行星,你需要用激光射掉它。。。激光可以射掉一行 或者一列的小行星,问最小需要发射多少次这道题 很久 以前就做过了 ,现在有做了 一下 ,对 匈牙利 有 个 更好的了解。。。转自 别处 : 匈牙利算法是寻找最大匹配的优秀算法,那么与这个看上去一点也不像二分图的题来说有什么用处呢?让我们来做一个尝试:把样例数据里面的横坐标作为二分图的一部,纵坐标作为二分图的另一部,坐标为(x, y)的小行星表示为从横坐标x到纵坐标y的一段弧,就有了下图:可以看出,原问题变成了下面这个问题:给定一个二分图G = (
阅读全文
摘要:以前就做过 二分图,在另一个 博客 里 ,现在 搬过来 了。。这里求的是最大匹配 匈牙利算法的基本知识: 百度百科: http://baike.baidu.com/view/501092.htm 维基百科: 这里面有邻接矩阵的模拟图 http://en.wikipedia.org/wiki/Hungarian_algorithm 二分图定理总结 原文地址 ======== 对于任意图: |最小边覆盖|+|最大匹配|=|V| 二分图的最大匹配=最小点覆盖数 对于二分图: 以下数值等价. 最大匹配 最小点覆盖 |V|-最大独立集(二分图or有向无环图) |V|-最小边覆盖数 |...
阅读全文
摘要:1 http://acm.hdu.edu.cn/showproblem.php?pid=3488/* 2 一开始看题完全蒙了 ,这怎么用二分图解啊,后来开了别人的结题报告 3 将图中的 入点放到 x集合 出点放到 y集合 看作二分图求解 4 但是还有一个疑问,为什么看成这样求出来的即使答案呢? 5 后来仔细想了想,原来 每个点的入点 出现在x集合 那么起出点 也相应的会出现在 x集合 6 因为每一个点都有至少 一个出点,这样构成的二分图 求其 最小权匹配 即可 7 */ 8 9 #include<stdio.h> 10 #define maxn 300 11 #in...
阅读全文
摘要:由于大牛们写过了,菜鸟就整理了一下:KM算法的基本概念:http://baike.baidu.com/view/739278.htm上面链接中有些名词看不懂的可以看下这个:http://baike.baidu.com/view/501092.htm看这个算法之前,最好先看下匈牙利算法,KM算法 是建立在匈牙利算法基础上实现的对于这个算法最有误区的地方,个人感觉还是在 X 集合 -d 和 Y 集合 + d之后 还要进行操作,再加上 深搜递归操作 ,理解容易产生误区,在这里我给出一组模板的测试数据来帮助初学者理解注意观察: visx[],visy[],lx[],ly[],linky[],在调用中的
阅读全文
浙公网安备 33010602011771号