POJ 3469 Dual Core CPU

47 篇文章 0 订阅

最小割

将两个处理器一个设成源点,一个设为汇点

对于每个任务,分别向源点和汇点连一条边,容量为它分别在两个处理器上执行的代价

然后对于每个可能的额外代价,在它对应的两个任务节点间连一条容量为额外代价的边

 

总代价=S(Ai)+S(Bi)+S(AiBj)

Ai表示第i个任务在第一个处理器上执行,Bi表示第i个任务在第二个处理器上执行

Ai属于集合s,Bi属于集合t

集合s-t构成了网络的割集,总代价正好表示这个割集的容量,最小代价即最小割,也就是最大流

 

别人的解题报告:

有一些模块(modules)和一个双核处理器,一个模块可以在任意一个核上处理,每个核对应每个模块有个开销。现在有一些模块间需要数据交换,如果需要数据交换的模块在一个核上处理,则不需要额外开销,否则需要加上一个开销。现在需要完成所有模块,问最小需要多少开销。

如果没有这个额外的开销,那么每个模块只要选择开销小的那个核就行了。额外的开销给选择加上了限制。

网络流的模型:

每个模块一个节点,原点与所有模块节点连接(称为上边),边权为第一个核对应该模块的开销。所有模块节点连接到汇点(称为下边),权为第二个核对应该模块的开销。然后需要数据交换的两个模块结点之间连接双向边(两个单向边,称为中边),权为对应的那个额外开销。这样,该图的最小割中,原点和模块节点之间的边,或者模块节点与汇点之间的边至少一条在割之中。同时,如果数据交换的结点选择了不同的核,那么他们之间的中边一定也在割集中(如果不在,那么可以构造出更小的割)。如果选择了相同的核,那么模块节点之间的那条表一定在割之中模块节点之间的那条表一定不在割之中(应为是最小割)。

一个合法的情况一定对应一个割(尽管割不一定对应合法情况)

证明: 首先,合法情况要求每个模块选个核,即一个模块节点连接的上下边至少一条要选中(在割集中)。

如果选中的所有边没有构成一个割,那么一定在去掉选中的边剩下的图中还存在增光路。增光路一定是有一个上边加若干中边加一个下边组成的。由于中边没有选中,说明对应的合法情况中中变得2个顶点模块选择了同一个核。由于是若干中边连接,所以这样的增光路也不存在。

如果最小割是一个合法的情况,那么一定对应着最小的花费了。

这题数据巨大,Ek一定超时,dd的dinic也跑了4秒半

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/biran007/archive/2009/05/26/4218454.aspx

 

代码:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值