Mike的农场 (BZOJ 4177)
题目大意:
给N个东西分AB类,分到A类和B类分别得到相应的钱记为A[i],B[i],然后有一些冲突关系<x,y,z>,如果物品x,y不同类需要付出z的钱。还有一些外快<S,x,y>,当某个集合里的元素都是x类的时候得到y的钱。 求最大收益。
思路:
1.如果只考虑冲突关系,那么就是非常裸的最小割,显然这题应该在最小割的基础上加点东东. 然后集合附加权貌似是个比较经典的东西(虽然我也是做了这题才知道...),我这种蒟蒻肯定不能独立AC啦,于是愉快地看了题解。貌似和BZOJ3438是差不多的,所以搜这题的题解的时候可以搜BZOJ3438的题解。
2.总结了一下前人经验发现大致有两种构图方法。其中方法二貌似只有一个博客里看到,感觉比较厉害,而且比较好理解。。
共同点:对于冲突<x,y,z>,连边<x,y,z> <y,x,z> (格式为<点,点,容量>).
方法一:
先把所有的钱加起来减去最小割就是答案。 对于附加权,A类集合搞一个新的点P,从P向集合中的点连边,容量无穷大,从S向P连边容量为附加权. B类集合同理,不过是从集合中的点连边到P,容量无穷大,从P到T连边容量为附加权。 对于每个点x,连边<S,x,A[i]> <x,T,B[i]>.
下面是本人YY的大致证明:其他的就不多说了,证明附加权的部分。
对于A类集合点P,如果边<S,P>被割掉了,那么必定有集合中的某个点x,<S,x>也被割掉了(反证:如果不成立,那么完全没必要割<S,P>),实际意义是集合中的元素不全是属于A类,所以扣掉代价,也就是这条边的容量。
对于B类集合点P,如果边<P,T>被割掉了,那么必定有集合中的某个点x,从S有路到x(反证:如果不成立,那么完全没必要割<P,T>),实际意义是集合中的元素不全是属于B类,所以扣掉代价,也就是这条边的容量。
方法二:
转化为最大权闭合图。假设所有点都被分到A类,所以把A[i]都加起来,还要加上A类集合的附加权.然后构造带权闭合图。一个点的点权为B[i]-A[i],实际意义是把它从A类变成B类的代价。 然后考虑附加权。 A类集合的附加权:搞一个新的点P,P的点权是附加权的相反数,从集合中的元素连边到P, 根据闭合图的定义,如果集合中的某个元素x选来了,也就是x变成了B类,那么P点也必须选来,所以就把相应的钱扣掉。 B类集合的附加权:搞一个新的点P,P的点权是附加权,从P连边到集合中的元素,表示如果要赚P的钱,必须把集合中的元素都变成B类。 然后就是最大权闭合图的做法了,具体不再赘述。
退役好久没做题,dinic的写不对了。。
Mike的农场 (BZOJ 4177)的更多相关文章
- bzoj 4177 Mike的农场
bzoj 4177 Mike的农场 思维有些江化了,一上来就想费用流做法,但其实就是个最小割啊. 考虑先将所有的收益拿到,再减去不能拿的以及三元组 \((i,j,k)\) 产生的代价.即,先让 \(a ...
- BZOJ 4177: Mike的农场( 最小割 )
显然是最小割... 对于规律(i, j, k) i,j 互相连边, 容量为k 对于规则(S, a, b) 新建一个点x, x与S中每个点连一条弧, 容量+∞, 然后再根据a决定x与源点或汇点连边. 跑 ...
- bzoj4177: Mike的农场
类似于最大权闭合图的思想. #include<cstdio> #include<cstring> #include<iostream> #include<al ...
- 【BZOJ4177】Mike的农场 最小割
[BZOJ4177]Mike的农场 Description Mike有一个农场,这个农场n个牲畜围栏,现在他想在每个牲畜围栏中养一只动物,每只动物可以是牛或羊,并且每个牲畜围栏中的饲养条件都不同,其中 ...
- 【bzoj4177】Mike的农场 网络流最小割
题目描述 Mike有一个农场,这个农场n个牲畜围栏,现在他想在每个牲畜围栏中养一只动物,每只动物可以是牛或羊,并且每个牲畜围栏中的饲养条件都不同,其中第i个牲畜围栏中的动物长大后,每只牛可以卖a[i] ...
- Mike的农场
题目 Mike有一个农场,这个农场n个牲畜围栏,现在他想在每个牲畜围栏中养一只动物,每只动物可以是牛或羊,并且每个牲畜围栏中的饲养条件都不同,其中第i个牲畜围栏中的动物长大后,每只牛可以卖a[i]元, ...
- Mike的农场 BZOJ4177
分析: 最小割,不选则割的建模题...(然而一开始我当成了费用流,简直丧心病狂...最后想到了最小割...) 对于条件一,直接建一条双向边就可以了,并且不计入sum中,因为这是作为费用的存在,让它跑出 ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- OI 刷题记录——每周更新
每周日更新 2016.05.29 UVa中国麻将(Chinese Mahjong,Uva 11210) UVa新汉诺塔问题(A Different Task,Uva 10795) NOIP2012同余 ...
随机推荐
- Cannot use object of type yii\db\Connection as array
$pointLog = $conn->createCommand('select * from table1 where is_deleted = 0 AND id1 = :id1 AND id ...
- java 笔试题 字符串旋转
package com.shb.java; /** * 取出第一个重复的字符 * @author shaobn * @date 2016-9-28 * @package_name com.shb.ja ...
- [技术分享] .NET下 , 上传图片的处理方式 , 贴上代码 .
如题 , 直接上单代码 , AC代码 <!DOCTYPE HTML> <html> <head> <meta charset="utf-8" ...
- 20. 星际争霸之php设计模式--适配器模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 关于linux中执行脚本或程序时指定的路径
假设/mnt/bin 目录下存在一个名为 hello.sh 的可执行文件. 1. 若当前目录是 /mnt/bin ,可以使用 ./hello.sh 来执行这个可执行文件,但是使用 hello.sh 就 ...
- 《zw版·Halcon-delphi系列原创教程》 Halcon分类函数008,matrix,矩阵函数
** 3dFromFundamentalMatrix( Rows1, Cols1, Rows2, Cols2, CovRR1, CovRC1, CovCC1, CovRR2, CovRC2, CovC ...
- RQNOJ Bus
H城是一座小城市,前几日才刚刚建立公交系统,且只有一辆公交车.于是,如何最大化这唯一一辆公交车的载客量成了亟待解决的问题. H城的俯视图可以近似地看成是一个棋盘网络——共有N行M列,从南向北,每行从1 ...
- 本地yum库制作及本地安装Docker
生产环境中,我们总是会遇到服务器无法连接外网的情况,这样,如果想安装某个应用,而这个应用依赖的其他类库又特别多,就很痛苦了.这个时候,就需要自己制作个本地的yum库,进行本地安装.本文将以Docker ...
- checkbox样式自定义
1.使用两张图片(选中和未选中),创建一个选择器. 2.使用checkbox的 drawableLeft drawableRight 等几个属性把选择器设置进去 3.checkbox的butt ...
- ssh 免密码登录
1.在本机下生成公钥/私钥对. ssh-keygen -t rsa -P '' -P表示密码,-P '' 就表示空密码,也可以不用-P参数,这样就要三车回车,用-P就一次回车.它在/home/yaoy ...