<转> 二分图多重匹配问题
在二分图最大匹配中,每个点(不管是X方点还是Y方点)最多只能和一条匹配边相关联,然而,我们经常遇到这种问题,即二分图匹配中一个点可以和多条匹配边相关联,但有上限,或者说,Li表示点i最多可以和多少条匹配边相关联。
二分图多重匹配分为二分图多重最大匹配与二分图多重最优匹配两种,分别可以用最大流与最大费用最大流解决。
(1)二分图多重最大匹配:
在原图上建立源点S和汇点T,S向每个X方点连一条容量为该X方点L值的边,每个Y方点向T连一条容量为该Y方点L值的边,原来二分图中各边在新的网络中仍存在,容量为1(若该边可以使用多次则容量大于1),求该网络的最大流,就是该二分图多重最大匹配的值。
(2)二分图多重最优匹配:
在原图上建立源点S和汇点T,S向每个X方点连一条容量为该X方点L值、费用为0的边,每个Y方点向T连一条容量为该Y方点L值、费用为0的边,原来二分图中各边在新的网络中仍存在,容量为1(若该边可以使用多次则容量大于1),费用为该边的权值。求该网络的最大费用最大流,就是该二分图多重最优匹配的值。
例题:
【1】POJ1698 Alice's Chance
将电影作为X方点,每一天作为Y方点(最多50周,每周7天,所以共设350个Y方点),若第i个电影可以在第j天搞就连边(i, j)。每个X方点的L值为该电影总共要搞多少天,每个Y方点的L值为1(每天最多只能搞一个电影),然后求二分图多重最大匹配,若能使所有从源点连向X方点的边都满流,则输出Yes,否则输出No。
【2】POJ2112 Optimal Milking
先预处理求出每两个点(包括挤奶点和牛)间的最短距离,然后将所有挤奶点作为X方点(L值为该挤奶点最多可以容纳多少牛),所有牛作为Y方点(L值为1),Xi和Yj间边的权值为这两个点之间的最短距离(若这两点间不存在路径则此处无边),然后问题就变成了求一个多重匹配,使得每个Y方点都有匹配点且匹配边中权值的最大值最小。
可以枚举最大边权值S,然后,原图中所有权值大于S的边都要删去。若此时图中存在符合要求的多重匹配,则S合法否则S不合法。由于S的合法性是单调的,所以可以二分枚举S。
相关文章
- <转载> GIT 操作小结 http://www.cnblogs.com/-ding/p/6008096.html
- <img> 标签 图片加载失败时候处理方案
- Unity3D与iOS的交互设计<ViewController 的跳转>
- <font color="red">[置顶]</font>
- JavaWeb 后端 <十> 之 数据池 C3P0 DPCB JNDI
- struts2--使用<s:token></s:token>标签防止重复提交
- [Tools] Scroll, Zoom, and Highlight code in a mdx-deck slide presentation with Code Surfer <🏄/>
- [Angular Directive] Structure directive and <template>
- IComparable<>,IFormattable,IEnumerable<>接口使用
- [ES6] 06. Arrow Function =>
- 通过HTML条件注释判断IE版本的HTML语句详解<!--[if IE]> <![endif]-->
- MySQL DATEDIFF(d1,d2)计算日期 d1->d2 之间相隔的天数
- select * from table where 1<>1
- Shell重定向&>file、2>&1、1>&2的区别
- 阅读<反欺骗的艺术>思考
- Python: 渐进猜数字游戏 <8> 代码优化 与 结项
- <input type="date">设置默认当前日期
- 象“[]”、“.”、“->”这类操作符前后不加空格