bzoj3438: 小M的作物
这题是一道最大权闭合图的经典难题(by Rose_max)
upd:不误人子弟了,这就是一个裸的最小割啊。。。。。
然后构图的方式就是把作物值分成AB集合,一个在st一边,一个在ed一边,st连作物流量为a[i],作物流ed流量为b[i],对于每一个组合,新建两个点,一个被st流流量为c1,一个流ed流量为c2,然后第一个流去集合中的作物,作物流回第二个点,流量无限。
sum-最小割
#include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std;int n,sum,st,ed;struct node {int x,y,c,next,other; }a[2100000];int len,last[110000]; void ins(int x,int y,int c) {int k1,k2;len++;k1=len;a[len].x=x;a[len].y=y;a[len].c=c;a[len].next=last[x];last[x]=len;len++;k2=len;a[len].x=y;a[len].y=x;a[len].c=0;a[len].next=last[y];last[y]=len;a[k1].other=k2;a[k2].other=k1; } void composition() {int x;sum=0;st=4001,ed=4002;len=0;memset(last,0,sizeof(last));for(int i=1;i<=n;i++)scanf("%d",&x), ins(st,i,x), sum+=x;for(int i=1;i<=n;i++)scanf("%d",&x), ins(i,ed,x), sum+=x;int m,c1,c2;scanf("%d",&m);for(int i=1;i<=m;i++){int t;int chst=n+i,ched=n*2+i;scanf("%d%d%d",&t,&c1,&c2);ins(st,chst,c1);sum+=c1;ins(ched,ed,c2);sum+=c2;for(int j=1;j<=t;j++)scanf("%d",&x), ins(chst,x,999999999), ins(x,ched,999999999);} }//------composition--------int h[110000],list[110000]; bool bt_h() {memset(h,0,sizeof(h));h[st]=1;list[1]=st;int head=1,tail=2;while(head!=tail){int x=list[head];for(int k=last[x];k;k=a[k].next){int y=a[k].y;if(a[k].c>0&&h[y]==0){h[y]=h[x]+1;list[tail]=y;tail++;}}head++;}if(h[ed]>0)return true;return false; } int findflow(int x,int f) {if(x==ed)return f;int s=0;for(int k=last[x];k;k=a[k].next){int y=a[k].y;if(a[k].c>0&&h[y]==(h[x]+1)&&s<f){int t=findflow(y,min(a[k].c,f-s));s+=t;a[k].c-=t;a[a[k].other].c+=t;}}if(s==0)h[x]=0;return s; }//---------网络流---------- int main() {scanf("%d",&n);composition();int ans=0;while(bt_h()==true){ans+=findflow(st,999999999);}printf("%d\n",sum-ans);return 0; }
转载于:https://www.cnblogs.com/AKCqhzdy/p/8343539.html
bzoj3438: 小M的作物相关推荐
- P1361 小M的作物(最小割)
P1361 小M的作物(最小割) 比较板子的题,关键是建图. 答案就是 s u m − sum- sum−最小割. 而根据最小割最大流定理,即可求出最小割. 复习一下 Dinic 算法流程: bfs给 ...
- (最小割)洛谷P1361 小M的作物
洛谷P1361 小M的作物 思路: 这是一个两者取一的模型,将点集一分为二. 最小割在数值上等同于最大流.割去权值和最小的边,使图分成两部分,割下来的边权值和为最小割. 对于此题,先不考虑种在一起的情 ...
- 网络流建图方法(二)——辅助点(虚点)决策法洛谷 P1361 小M 的作物 Dinic
inic声明:本博客默认读者会最大流最小割的定理,会Dinic, 最小割在数值上 == 最大流 但是在意义上没有任何关系,姑且可以这样求得最小割,当然可以自行百度最小割的证明定理 还是从题目开始说起 ...
- 【洛谷1361】 小M的作物(最小割)
传送门 洛谷 Solution 这是一个比较实用的套路,很多题目都有用,而且这个套路难以口胡出来. 考虑把每一个附加贡献重新建一个点,然后向必需的点连边,流量为val. 然后直接种植的从源点向这个点连 ...
- 洛谷 - P1361 小M的作物(最大流最小割)
题目链接:点击查看 题目大意:给出 n 个植物,每个植物种在 A 农场的收益是 a[ i ] ,种在 B 农场的收益是 b[ i ] ,再给出 m 组关系,每组中的所有植物如果都在 A 农场的话额外收 ...
- 洛谷 - P1361 - 小M的作物 - 最小割 - 最大权闭合子图
第一次做最小割,不是很理解. https://www.luogu.org/problemnew/show/P1361 要把东西分进两类里,好像可以应用最小割的模板,其中一类A作为源点,另一类B作为汇点 ...
- BZOJ3894: 文理分科
BZOJ3894: 文理分科 Description 文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠结过) 小P所在的班级要进行文理分科. 他的班级可以用一个n*m的矩阵进行描述,每个 ...
- BZOJ 2132 圈地计划(最小割)【BZOJ 修复工程】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2132 是 hydro 的 BZOJ ...
- 2018.11.06-知识回顾
1.最小圆覆盖 #include<bits/stdc++.h> #define il inline #define D double #define _(d) while(d(isdigi ...
最新文章
- Android中后台定时任务实现,即时数据同步问题思考!
- 算法回顾(三) 二分查找
- COM和ATL学习方法
- 2017 [六省联考] T5 分手是祝愿
- hadoop2.6.4 在ubuntu14.04下的搭建
- oracle linux 版本 uek,在运行 Oracle Linux 7.1 UEK3 或 7.2 或者 RHEL 7.1 或 7.2 的系统上,RDMA 服务无法启动...
- PreScan笔记(1)——入坑之简单介绍和Demo
- jmeter导入已有的脚本_jmeter 开发导入excel脚本
- 原码一位乘法c语言程序,原码一位乘法与补码一位乘法
- php 七牛云获得上传token,客户端生成七牛上传token
- Matlab 查阅、读取nc数据
- 网络安全:为大家介绍5种常见的加密算法
- 微服务:注册中心ZooKeeper、Eureka、Consul 、Nacos对比
- arm neon优化
- 穷爸爸与富爸爸读后感(3)
- C练题笔记之:Leetcode-1184. 公交站间的距离
- 代码题--C++--最少立方数之和每个数最少可以写成几个数的立方和
- Mac M1 pro 安装 python2 教程
- js根据汉字拼音首字母排序分组
- 基于Linux下搭建NextCloud构建自己的私有网盘