Mike的农场 BZOJ4177
分析:
最小割,不选则割的建模题...(然而一开始我当成了费用流,简直丧心病狂...最后想到了最小割...)
对于条件一,直接建一条双向边就可以了,并且不计入sum中,因为这是作为费用的存在,让它跑出来就可以了,不要考虑太多的。对于条件二,建一个点,分别连向{S}牧场,流量为inf,并且如果是0的话,连接S,如果是1的话,连接T。
附上代码:
- #include <cstdio>
- #include <algorithm>
- #include <cmath>
- #include <cstring>
- #include <iostream>
- #include <queue>
- #include <cstdlib>
- using namespace std;
- #define N 15005
- #define S 0
- #define T 15001
- int head[N],cnt,dep[N],n,m,k;long long sum;
- struct node
- {
- int to,next,val;
- }e[1000010];
- void add(int x,int y,int z){e[cnt].to=y;e[cnt].next=head[x];e[cnt].val=z;head[x]=cnt++;}
- void insert(int x,int y,int z){add(x,y,z);add(y,x,0);}
- int bfs()
- {
- memset(dep,-1,sizeof(dep));
- queue <int>q;while(!q.empty())q.pop();q.push(S);dep[S]=1;
- while(!q.empty())
- {
- int x=q.front();q.pop();
- for(int i=head[x];i!=-1;i=e[i].next)
- {
- int to1=e[i].to;
- if(dep[to1]==-1&&e[i].val)dep[to1]=dep[x]+1,q.push(to1);
- }
- }
- return dep[T]==-1?0:1;
- }
- int dfs(int x,int maxf)
- {
- if(x==T)return maxf;
- int tflow=maxf,nowf;
- for(int i=head[x];i!=-1;i=e[i].next)
- {
- int to1=e[i].to;
- if(dep[to1]==dep[x]+1&&e[i].val)
- {
- nowf=dfs(to1,min(e[i].val,tflow));
- if(!nowf)dep[to1]=-1;
- tflow-=nowf,e[i].val-=nowf,e[i^1].val+=nowf;
- if(!tflow)break;
- }
- }
- return maxf-tflow;
- }
- int main()
- {
- memset(head,-1,sizeof(head));
- scanf("%d%d%d",&n,&m,&k);
- for(int i=1;i<=n;i++)
- {
- int x;
- scanf("%d",&x);sum+=x;
- insert(S,i,x);
- }
- for(int i=1;i<=n;i++)
- {
- int x;
- scanf("%d",&x);sum+=x;
- insert(i,T,x);
- }
- for(int i=1;i<=m;i++)
- {
- int x,y,z;
- scanf("%d%d%d",&x,&y,&z);
- insert(x,y,z);insert(y,x,z);
- }
- for(int i=1;i<=k;i++)
- {
- int x,y,z,v;scanf("%d%d%d",&x,&y,&z);sum+=z;
- if(y==0)
- {
- insert(S,i+n,z);
- while(x--){scanf("%d",&v);insert(i+n,v,1<<30);}
- }else
- {
- insert(i+n,T,z);
- while(x--){scanf("%d",&v);insert(v,i+n,1<<30);}
- }
- }
- long long ans=0;
- while(bfs())ans+=dfs(S,1<<30);
- printf("%lld\n",sum-ans);
- return 0;
- }
Mike的农场 BZOJ4177的更多相关文章
- 【BZOJ4177】Mike的农场 最小割
[BZOJ4177]Mike的农场 Description Mike有一个农场,这个农场n个牲畜围栏,现在他想在每个牲畜围栏中养一只动物,每只动物可以是牛或羊,并且每个牲畜围栏中的饲养条件都不同,其中 ...
- bzoj4177: Mike的农场
类似于最大权闭合图的思想. #include<cstdio> #include<cstring> #include<iostream> #include<al ...
- BZOJ 4177: Mike的农场( 最小割 )
显然是最小割... 对于规律(i, j, k) i,j 互相连边, 容量为k 对于规则(S, a, b) 新建一个点x, x与S中每个点连一条弧, 容量+∞, 然后再根据a决定x与源点或汇点连边. 跑 ...
- bzoj 4177 Mike的农场
bzoj 4177 Mike的农场 思维有些江化了,一上来就想费用流做法,但其实就是个最小割啊. 考虑先将所有的收益拿到,再减去不能拿的以及三元组 \((i,j,k)\) 产生的代价.即,先让 \(a ...
- 【bzoj4177】Mike的农场 网络流最小割
题目描述 Mike有一个农场,这个农场n个牲畜围栏,现在他想在每个牲畜围栏中养一只动物,每只动物可以是牛或羊,并且每个牲畜围栏中的饲养条件都不同,其中第i个牲畜围栏中的动物长大后,每只牛可以卖a[i] ...
- Mike的农场
题目 Mike有一个农场,这个农场n个牲畜围栏,现在他想在每个牲畜围栏中养一只动物,每只动物可以是牛或羊,并且每个牲畜围栏中的饲养条件都不同,其中第i个牲畜围栏中的动物长大后,每只牛可以卖a[i]元, ...
- Mike的农场 (BZOJ 4177)
题目大意: 给N个东西分AB类,分到A类和B类分别得到相应的钱记为A[i],B[i],然后有一些冲突关系<x,y,z>,如果物品x,y不同类需要付出z的钱.还有一些外快<S,x,y& ...
- bzoj AC倒序
Search GO 说明:输入题号直接进入相应题目,如需搜索含数字的题目,请在关键词前加单引号 Problem ID Title Source AC Submit Y 1000 A+B Problem ...
- 2015湖南省选集训DAY5——work(BZOJ4177)
Description Mike有一个农场,这个农场n个牲畜围栏,如今他想在每一个牲畜围栏中养一仅仅动物,每仅仅动物能够是牛或羊,并且每一个牲畜围栏中的饲养条件都不同,当中第i个牲畜围栏中的动物长大后 ...
随机推荐
- git使用相关记录
上传github操作记录:https://blog.csdn.net/pql925/article/details/72772660 git提交仓库相关:https://blog.csdn.net/M ...
- 安卓测试【一】android sdk环境变量配置
移动应用自动化测试的配置,先于官网下载Android SDK,然后配置环境变量. 配置android sdk环境变量 1. 新建ANDROID_HOME环境变量,变量值为SDK解压的路径 2. 追加 ...
- React Native 如何做轮播图 react-native-swiper
//:仿饿了么github:https://github.com/stoneWeb/elm-react-native 欢迎各位同学加入: React-Native群:397885169 大前端群:54 ...
- 前端需要掌握的后台基础:HTTP协议
什么是HTTP? 以下来自度娘最为专业的解释: 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标 ...
- .NET(C#)使用Serialize、Deserialize序列和反序列化XML文档
本文给大家分享一下C#操作(读取.写入)XML文档的实用方法,即用.NET本身提供的Deserialize和Serialize进行反序列化和序列化XML文档.这种方法主要是对比较规范的XML文档进行操 ...
- jQuery为元素设置css的问题
例子: 有如下的html代码 对文本框设置字体大小为20px ,即font-size:20px 首先会想到如下: $('input').css({font-size:'20px'}); 由于属性不能使 ...
- 重置AD用户密码
$cc = import-csv D:\Powershell\Tauba.csv foreach ($c in $cc) { $c.username $pwd = $c.password get-ad ...
- django导入自定义模块
自定义模块cust.py位于应用aptest目录下 1.编辑settings.py from aptest import cust 2.编辑views.py from cust import pc # ...
- It’s Time To Think Linq
动机 如果你有以下迷惑,你应该看看这篇文章 你想办法找到所有与GameObject.FindGameObjectsWithTag的变换(),而不是游戏本身的对象 你需要操作,排序和更改列表和数组的类型 ...
- 解决windows下vim中文乱码
解决windows下vim中文乱码 windows安装了vim8,也就是gvim后,打开带有中文的文档,显示中文是乱码. 毕竟有许多文档我是用utf-8编码的,所以解决的办法是设置一下编码为utf-8 ...