题目大意:

给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)的更多相关文章

  1. bzoj 4177 Mike的农场

    bzoj 4177 Mike的农场 思维有些江化了,一上来就想费用流做法,但其实就是个最小割啊. 考虑先将所有的收益拿到,再减去不能拿的以及三元组 \((i,j,k)\) 产生的代价.即,先让 \(a ...

  2. BZOJ 4177: Mike的农场( 最小割 )

    显然是最小割... 对于规律(i, j, k) i,j 互相连边, 容量为k 对于规则(S, a, b) 新建一个点x, x与S中每个点连一条弧, 容量+∞, 然后再根据a决定x与源点或汇点连边. 跑 ...

  3. bzoj4177: Mike的农场

    类似于最大权闭合图的思想. #include<cstdio> #include<cstring> #include<iostream> #include<al ...

  4. 【BZOJ4177】Mike的农场 最小割

    [BZOJ4177]Mike的农场 Description Mike有一个农场,这个农场n个牲畜围栏,现在他想在每个牲畜围栏中养一只动物,每只动物可以是牛或羊,并且每个牲畜围栏中的饲养条件都不同,其中 ...

  5. 【bzoj4177】Mike的农场 网络流最小割

    题目描述 Mike有一个农场,这个农场n个牲畜围栏,现在他想在每个牲畜围栏中养一只动物,每只动物可以是牛或羊,并且每个牲畜围栏中的饲养条件都不同,其中第i个牲畜围栏中的动物长大后,每只牛可以卖a[i] ...

  6. Mike的农场

    题目 Mike有一个农场,这个农场n个牲畜围栏,现在他想在每个牲畜围栏中养一只动物,每只动物可以是牛或羊,并且每个牲畜围栏中的饲养条件都不同,其中第i个牲畜围栏中的动物长大后,每只牛可以卖a[i]元, ...

  7. Mike的农场 BZOJ4177

    分析: 最小割,不选则割的建模题...(然而一开始我当成了费用流,简直丧心病狂...最后想到了最小割...) 对于条件一,直接建一条双向边就可以了,并且不计入sum中,因为这是作为费用的存在,让它跑出 ...

  8. bzoj AC倒序

    Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...

  9. OI 刷题记录——每周更新

    每周日更新 2016.05.29 UVa中国麻将(Chinese Mahjong,Uva 11210) UVa新汉诺塔问题(A Different Task,Uva 10795) NOIP2012同余 ...

随机推荐

  1. .Net 中HashTable,HashMap 和 Dictionary<key,value> 和List<T>和DataTable的比较

    参考资料 http://www.cnblogs.com/MichaelYin/archive/2011/02/14/1954724.html http://zhidao.baidu.com/link? ...

  2. Signalr简单例子

    一.需要引用的 Js: 二.编码 用的是signalr2,需要新建Startup.cs类,编码如下: using Microsoft.Owin; using Owin; using System; u ...

  3. 机器学习实战-边学边读python代码(3)

    程序清单2-3 归一化特征值: def autoNorm(dataSet): /* >>> barray([[ 1., 2., 3.], [ 2., 3., 4.], [ 10., ...

  4. 十分钟学会mysql数据库操作

    Part1:写在最前 MySQL安装的方式有三种: ①rpm包安装 ②二进制包安装 ③源码安装 这里我们推荐二进制包安装,无论从安装速度还是用于生产库安装环境来说,都是没问题的.现在生产库一般采用My ...

  5. <c:if>标签判断是否为空

    <c:if test="${not empty feeType}">  注意:大括号外面不能为空. ${orderNo.ethdOriginalOrderNo} < ...

  6. linux bash快捷键

    bash快捷键 CTRL+F 光标向前移动一个字母 CTRL+B 光标向后移动一个字母 CTRL+A HOME CTRL+E END

  7. SpringMVC 手动控制事务提交

    描述 事务还是一个比较好的东东,有了这个,我们在做流程性的东西的时候,就会很好,很nice. 现在看看 SpringMVC 如何实现的,详细请看代码: 1.配置文件 applicationContex ...

  8. php Windows系统 wamp集成环境下redis的使用

    先说一下我的本地环境,使用的是wamp集成环境,(Apache 2.4.9.PHP 5.5.12.MySQL 5.6.17) windows下安装PHP扩展: 第一步:找到扩展文件(.dll),htt ...

  9. [Python]处理windows下多级目录文件,上传到Linux服务器

    #-*- coding: utf-8 -*- __author__ = 'tsbc' import sys reload(sys) sys.setdefaultencoding('utf-8') im ...

  10. Android跨进程通信的四种方式

    由于android系统中应用程序之间不能共享内存.因此,在不同应用程序之间交互数据(跨进程通讯)就稍微麻烦一些.在android SDK中提供了4种用于跨进程通讯的方式.这4种方式正好对应于andro ...