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同余 ...
随机推荐
- 解决Firefox浏览器每次打开都弹出导入向导的问题
每次打开Firefox浏览器都会弹出导入向导这个页面,只有这个页面关闭后,Firefox界面才会打开. 解决办法: C:\Users\{用户名}\AppData\Roaming\Mozilla\Fir ...
- 最长公共上升子序列(LCIS)
最长公共上升子序列慕名而知是两个字符串a,b的最长公共递增序列,不一定非得是连续的.刚开始看到的时候想的是先用求最长公共子序列,然后再从其中找到最长递增子序列,可是仔细想一想觉得这样有点不妥,然后从网 ...
- SQL中插入单引号,新增修改删除
1.插入单引号如果不转化的话,字符串插入到数据库中错误的,只要在字符串中有单引号的地方在加一个单引号即可. 例如:在数据库插入'井下设备' : insert into Static_Bel ...
- python windows安装
一.下载并安装 下载地址http://www.python.org/download/ 安装 二.配置环境变量 配置python环境变量以便后面安装插件.D:\Program Files\Python ...
- 企业信息系统——CRM
客户关系管理系统(Customer Relationship Management)将客户看作是企业的一项重要资产,客户关怀是CRM的中心,其目的是与客户建立长期和有效的业务关系,在与客户的每个“接触 ...
- transform scale 背景图片模糊怎么办?
transform: translateZ(0) scale(1, 1); 就是这样(摊手表情),不晓得什么原理.
- artTemplate模板引擎
artTemplate模板引擎 <li>索引 {{i + 1}} :{{value}}</li> {{/each}} </ul> </ ...
- python : HTML+CSS (左侧菜单)
左侧菜单 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3 ...
- css3 calc()方法详解
calc()对大家来说,或许很陌生,不太会相信calc()是css中的部分.因为看其外表像个函数,既然是函数为何又出现在CSS中呢?这一点也让我百思不得其解,今天有一同事告诉我,说CSS3中有一个属性 ...
- Android 对电话进行监听和挂断
1.添加权限 <!--拨打电话的权限--><uses-permission android:name="android.permission.PROCESS_OUTGOIN ...