POJ 2396 - Budget 有源汇的上下界可行流

POJ 2396 - Budget 有源汇的上下界可行流
转自http://hi.baidu.com/zfy0701/blog/item/6449d82a64e15e3e5343c1ba.html

http://acm.pku.edu.cn/JudgeOnline/problem?id=2396

题目的大意是:给定一个矩阵每行,每列的和,和各个元素的限制条件(>, =, <),求出一个满足这各种限制的矩阵。

这个模型很类似与经典的矩阵取整模型。

设行数为row,列数为col.
把矩阵中任意一个元素的大小看做是一个流,那么对于每行的和,就刚好可以建立一个流量平衡的关系。

我们以如下方式建立模型:

给每行,每列各建立一个节点。
设源点s与每个行节点连接(流量的上下界限制为每行的和),每个列节点与汇点t连接(流量的上下界限制为每列的和)。
从每个行节点流出col条边,流量的上下界从input的条件中获取,同理,每个列节点,有row条边流入。
这样,就把这个题的模型建立好了。

接下来我们就需要用网络流算法解这个模型。

首先,对于无源汇的上下界可行流,常见做法是拆边:

然后转换成无下界的模型去做:

即添加源汇s, t,然后将任意一条边(u, v, l, c)(即u到v,下界l,上界c的边)拆成三条:
(u, v, 0, c - l), (s, v, 0, l), (u, t, 0, l)
其思想实际就是让所边的下界流量的分离出来,作为一条"必要边"(即如果有可行流,这些容量为下界的边一定是满的),让其统一流入汇,然后让源点来提供这样的流量。
然后在这个网络上求最大流。看最大流是否 == 所有边的下界之和。

然而此题已经有了源汇,我们就先连一条(t, s, 0, 无限大)的边(显然这不影响流量平衡条件)。这样就转换成了前面所说的无源汇的情况,然后求之。
输出的结果就让相应原始边的流量加上他们的下界就可以了(即边(u, v, 0, c - l)的流量 + l)。

要注意的地方:
一个元素可能有多个约数条件,需要取最下界最大和上界最小的条件。
且网络模型中,上下界均是可以取到的值,但条件中的大于小于的值是不能取到的,需要+1或-1以转化

这题开始wa了几次,原因是:数据中有
0 0 操作符 某个值
的情况,这样约束的是整个矩阵,需要注意下。

这题代码最后用了6524B(SAP),AC之后的感觉很爽。

另:SGU194是一道更简单的上下界可行流。
更多此问题相关资量可参考《网络流:理论、算法和应用》
或Amber(一头非常大的牛)写得《图论总结》(http://adn.cn/blog/article.asp?id=5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值