项目分配问题 poj 3469 uvalive 3780

                                                                                        项目分配问题 poj 3469 uvalive 3780

    比赛的时候做到了uvalive3780,想了很久很久还是不知道怎么建图,赛后问了一下风神,叫什么项目分配问题,感觉真是博大精深.

    Poj3469的题意就是有一些任务,每个任务可以在两个cpu上分别运行,代价是ai,bi,但是对于一些,指定的任务对,他们之间存在数据交换,如果在不同的cpu上运行,需要一定的代价,问如何分配这些任务使得总代价最小.

    把这类问题一些任务存在两个选择,对应各自的代价,在一些组相异的选择就会产生相应的费用就叫做项目分配问题.

    对于这类问题的建图方法就是,每个任务一个点,不用拆点,很神奇吧,从原点连一条到该店权值为A模式的花费,再连一条到汇点权值为B模式的花费.如果uv在不同模式下花费为w,建边两条从uv权值w,vuw.

    总觉得很神奇.为什么这样跑出来的最小割就是答案呢,先明确一下割的意义,如何割边是A模式花费就代表该任务选择A模式,如果是两任务点之间的边就代表选择承受两任务不同模式的花费,跑完最大流之后两种模式的边必然有一条成为割边,因为否则st就已经直接连通了.

    假如每个任务的两条模式边之间有且仅有一条成为割边,模型应该就很好理解了,两个模式选择一个的花费加上如果两个模式冲突之间的花费(因为建的双向边),所以选择了一个模式以后对应的另一半必然畅通所以花费必须割掉.

    接下来的问题就是证明同一个模式的两条边必定不全是割边.如果全是割边这个模型也就解释不过去了.在下面的图中,假如存在的割边是a b e f,那个此时cd是连通的另外的一条割边必定是图中黄色的两条之一,如果是左边,那么b就是多割去的,如果是右边,那么e就是多割去的.

   

    这张图当然只是一种情况,如何推广,因为在两点之间是建的双向边所以如果是一组任务的点必定均是一个强连通分量,即朋友的朋友就可以当成朋友来看待.如果一个朋友仅存在一个直接朋友,那么很其中一条边显然是多割去的,如果有超过两个直接朋友,依然是这样分析,如果可以省去,来自上游的几条边必定是隔断的.这样就证明了只有不可能两条模式边均是割边.

    Uvalive3780  http://livearchive.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=20&page=show_problem&problem=1781

    同理如果初始其实的意愿是1,那么到t权为1,s权为0,意愿是0则相反.嘻嘻.

    项目分配问题还是比较固定的一类建图方法.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值