一些网络流的题目

bzoj1433假期的宿舍:裸的二分图。
bzoj1412狼和羊的故事:从源点向狼和从羊向汇点连inf的边,再从狼向羊和空格,从空格向空格和羊连1的边,跑最小割就好了。
bzoj1066蜥蜴:很容易可以想到需要拆点。将a拆成a1和a2,从源点向a1(开始时有蜥蜴的各子)连1的边,再从a1向a2连a的高度的边,从a2向b1(a2与b1的距离小于等于d)连a的高度的边,再从a2向汇点连高度的边,跑最大流就行了。
bzoj1934Vote 善意的投票&&bozj2127happiness:这类问题都有一种建图的方式,我们一2127为例子:
这里写图片描述
我们把一个二元组的关系建成上面的这个图的样子。S代表的文科,T代表的理科,那么个图的4种割就对应了4总选择的方案。(例如割掉a,b就代表了放弃了他们都选文科时的代价)
这样我么将a的边权设为A文+AB文/2,b的为B文+AB文/2,c的为A理+AB理/2,d的为B理+AB理/2,e的为AB文/2+AB理/2。
这样跑出最小割来再用总代价减一下就行了。
bzoj2039employ人员雇佣:答案ans可以表示成ans= 所有的收益-i属于S割的(雇佣i的代价)-不能同时雇佣i,j的带价(i属于S割,j属于T割)-不雇佣i所造成的带价也就是i所有的贡献(i属于T割)。那么建图也就出来了:S->i连ai,i->j连Ei,j,i->T连i的所有贡献。答案就是所有的贡献和减去最小割。
bzoj2756奇怪的游戏:首先我们对格子进行黑白染色,然后我么对n*m进行奇偶讨论。num表示一种颜色的格子的数量,sum表示一种颜色的格子的高度和。那么答案ans就可以表示成:ans * numb-sumb=ans * numw-sumw。ans=(sumb-sumw)/(numb-numw)。
那么当n*m为奇数时,也就是unmb!=numw的时候,我们可以直接求出答案,跑一边网络流验证一下就好了。
当n*m为偶数的时候,我们可以发现当高度为ans的时候,那么我们也可以有ans构造出ans+1来,就相当于拿1 * 2的骨牌覆盖一样。这样我们就可以二分了。二分后再用网络流验证就行了。
可以发现,高度增加是,一定是黑白格子一起增加,我们就可以利用这个性质来判断无解。
bzoj3144切糕:比较裸的网络流,建完图后跑一边最小割就行了。
bzoj2561最小生成树:我们就以最小生成树来说,我们将边权小于加入边的边全部放到网络流的图上,如果这个图中的给定的边的两个端点是联通的,那么我们求出这张图的最小割就代表着去掉最小的边使得给定的边出现在生成树上,所以求出的最小割就是答案。最大生成树也是一样。将这两次的答案加起来就是最终的答案。这两次要分别建图,分别做,不能在一张图中跑。
bzoj1834network 网络扩容:第一问裸的最大流,关键是第二问。我们第一次建的边都是费用为0的边,我们继续在这张残留网络上重新加一次边,容量为inf,费用为给定的费用。为什么要这样做呢?因为我们第一次求得最大流可能只是一种情况,那么我们要避免其他情况的干扰,所以要保留那些没用过或者没用完的边,让他们的代价是0。所以我们需要从残存网络上建图。
对于最后的流量限制k,我们只需要建立一个虚拟源点S,向1连一条容量为k费用为0的边就好了。当然也可以在跑SPFA的时候判断一下流量。

code:
bzoj1433假期的宿舍
bzoj1412狼和羊的故事
bzoj1066蜥蜴
bzoj1934Vote 善意的投票
bzoj2127happiness
bzoj2039employ人员雇佣
bzoj2756奇怪的游戏
bzoj3144切糕
bzoj2561最小生成树
bzoj1834network 网络扩容

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值