分析:

最小割,不选则割的建模题...(然而一开始我当成了费用流,简直丧心病狂...最后想到了最小割...)

对于条件一,直接建一条双向边就可以了,并且不计入sum中,因为这是作为费用的存在,让它跑出来就可以了,不要考虑太多的。对于条件二,建一个点,分别连向{S}牧场,流量为inf,并且如果是0的话,连接S,如果是1的话,连接T。

附上代码:

  1. #include <cstdio>
  2. #include <algorithm>
  3. #include <cmath>
  4. #include <cstring>
  5. #include <iostream>
  6. #include <queue>
  7. #include <cstdlib>
  8. using namespace std;
  9. #define N 15005
  10. #define S 0
  11. #define T 15001
  12. int head[N],cnt,dep[N],n,m,k;long long sum;
  13. struct node
  14. {
  15. int to,next,val;
  16. }e[1000010];
  17. void add(int x,int y,int z){e[cnt].to=y;e[cnt].next=head[x];e[cnt].val=z;head[x]=cnt++;}
  18. void insert(int x,int y,int z){add(x,y,z);add(y,x,0);}
  19. int bfs()
  20. {
  21. memset(dep,-1,sizeof(dep));
  22. queue <int>q;while(!q.empty())q.pop();q.push(S);dep[S]=1;
  23. while(!q.empty())
  24. {
  25. int x=q.front();q.pop();
  26. for(int i=head[x];i!=-1;i=e[i].next)
  27. {
  28. int to1=e[i].to;
  29. if(dep[to1]==-1&&e[i].val)dep[to1]=dep[x]+1,q.push(to1);
  30. }
  31. }
  32. return dep[T]==-1?0:1;
  33. }
  34. int dfs(int x,int maxf)
  35. {
  36. if(x==T)return maxf;
  37. int tflow=maxf,nowf;
  38. for(int i=head[x];i!=-1;i=e[i].next)
  39. {
  40. int to1=e[i].to;
  41. if(dep[to1]==dep[x]+1&&e[i].val)
  42. {
  43. nowf=dfs(to1,min(e[i].val,tflow));
  44. if(!nowf)dep[to1]=-1;
  45. tflow-=nowf,e[i].val-=nowf,e[i^1].val+=nowf;
  46. if(!tflow)break;
  47. }
  48. }
  49. return maxf-tflow;
  50. }
  51. int main()
  52. {
  53. memset(head,-1,sizeof(head));
  54. scanf("%d%d%d",&n,&m,&k);
  55. for(int i=1;i<=n;i++)
  56. {
  57. int x;
  58. scanf("%d",&x);sum+=x;
  59. insert(S,i,x);
  60. }
  61. for(int i=1;i<=n;i++)
  62. {
  63. int x;
  64. scanf("%d",&x);sum+=x;
  65. insert(i,T,x);
  66. }
  67. for(int i=1;i<=m;i++)
  68. {
  69. int x,y,z;
  70. scanf("%d%d%d",&x,&y,&z);
  71. insert(x,y,z);insert(y,x,z);
  72. }
  73. for(int i=1;i<=k;i++)
  74. {
  75. int x,y,z,v;scanf("%d%d%d",&x,&y,&z);sum+=z;
  76. if(y==0)
  77. {
  78. insert(S,i+n,z);
  79. while(x--){scanf("%d",&v);insert(i+n,v,1<<30);}
  80. }else
  81. {
  82. insert(i+n,T,z);
  83. while(x--){scanf("%d",&v);insert(v,i+n,1<<30);}
  84. }
  85. }
  86. long long ans=0;
  87. while(bfs())ans+=dfs(S,1<<30);
  88. printf("%lld\n",sum-ans);
  89. return 0;
  90. }

  

Mike的农场 BZOJ4177的更多相关文章

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

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

  2. bzoj4177: Mike的农场

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

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

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

  4. bzoj 4177 Mike的农场

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

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

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

  6. Mike的农场

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

  7. Mike的农场 (BZOJ 4177)

    题目大意: 给N个东西分AB类,分到A类和B类分别得到相应的钱记为A[i],B[i],然后有一些冲突关系<x,y,z>,如果物品x,y不同类需要付出z的钱.还有一些外快<S,x,y& ...

  8. bzoj AC倒序

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

  9. 2015湖南省选集训DAY5——work(BZOJ4177)

    Description Mike有一个农场,这个农场n个牲畜围栏,如今他想在每一个牲畜围栏中养一仅仅动物,每仅仅动物能够是牛或羊,并且每一个牲畜围栏中的饲养条件都不同,当中第i个牲畜围栏中的动物长大后 ...

随机推荐

  1. git使用相关记录

    上传github操作记录:https://blog.csdn.net/pql925/article/details/72772660 git提交仓库相关:https://blog.csdn.net/M ...

  2. 安卓测试【一】android sdk环境变量配置

    移动应用自动化测试的配置,先于官网下载Android SDK,然后配置环境变量. 配置android sdk环境变量 1.  新建ANDROID_HOME环境变量,变量值为SDK解压的路径 2. 追加 ...

  3. React Native 如何做轮播图 react-native-swiper

    //:仿饿了么github:https://github.com/stoneWeb/elm-react-native 欢迎各位同学加入: React-Native群:397885169 大前端群:54 ...

  4. 前端需要掌握的后台基础:HTTP协议

    什么是HTTP? 以下来自度娘最为专业的解释: 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标 ...

  5. .NET(C#)使用Serialize、Deserialize序列和反序列化XML文档

    本文给大家分享一下C#操作(读取.写入)XML文档的实用方法,即用.NET本身提供的Deserialize和Serialize进行反序列化和序列化XML文档.这种方法主要是对比较规范的XML文档进行操 ...

  6. jQuery为元素设置css的问题

    例子: 有如下的html代码 对文本框设置字体大小为20px ,即font-size:20px 首先会想到如下: $('input').css({font-size:'20px'}); 由于属性不能使 ...

  7. 重置AD用户密码

    $cc = import-csv D:\Powershell\Tauba.csv foreach ($c in $cc) { $c.username $pwd = $c.password get-ad ...

  8. django导入自定义模块

    自定义模块cust.py位于应用aptest目录下 1.编辑settings.py from aptest import cust 2.编辑views.py from cust import pc # ...

  9. It’s Time To Think Linq

    动机 如果你有以下迷惑,你应该看看这篇文章 你想办法找到所有与GameObject.FindGameObjectsWithTag的变换(),而不是游戏本身的对象 你需要操作,排序和更改列表和数组的类型 ...

  10. 解决windows下vim中文乱码

    解决windows下vim中文乱码 windows安装了vim8,也就是gvim后,打开带有中文的文档,显示中文是乱码. 毕竟有许多文档我是用utf-8编码的,所以解决的办法是设置一下编码为utf-8 ...