这题是一道最大权闭合图的经典难题(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的作物相关推荐

  1. P1361 小M的作物(最小割)

    P1361 小M的作物(最小割) 比较板子的题,关键是建图. 答案就是 s u m − sum- sum−最小割. 而根据最小割最大流定理,即可求出最小割. 复习一下 Dinic 算法流程: bfs给 ...

  2. (最小割)洛谷P1361 小M的作物

    洛谷P1361 小M的作物 思路: 这是一个两者取一的模型,将点集一分为二. 最小割在数值上等同于最大流.割去权值和最小的边,使图分成两部分,割下来的边权值和为最小割. 对于此题,先不考虑种在一起的情 ...

  3. 网络流建图方法(二)——辅助点(虚点)决策法洛谷 P1361 小M 的作物 Dinic

    inic声明:本博客默认读者会最大流最小割的定理,会Dinic, 最小割在数值上 == 最大流 但是在意义上没有任何关系,姑且可以这样求得最小割,当然可以自行百度最小割的证明定理 还是从题目开始说起 ...

  4. 【洛谷1361】 小M的作物(最小割)

    传送门 洛谷 Solution 这是一个比较实用的套路,很多题目都有用,而且这个套路难以口胡出来. 考虑把每一个附加贡献重新建一个点,然后向必需的点连边,流量为val. 然后直接种植的从源点向这个点连 ...

  5. 洛谷 - P1361 小M的作物(最大流最小割)

    题目链接:点击查看 题目大意:给出 n 个植物,每个植物种在 A 农场的收益是 a[ i ] ,种在 B 农场的收益是 b[ i ] ,再给出 m 组关系,每组中的所有植物如果都在 A 农场的话额外收 ...

  6. 洛谷 - P1361 - 小M的作物 - 最小割 - 最大权闭合子图

    第一次做最小割,不是很理解. https://www.luogu.org/problemnew/show/P1361 要把东西分进两类里,好像可以应用最小割的模板,其中一类A作为源点,另一类B作为汇点 ...

  7. BZOJ3894: 文理分科

    BZOJ3894: 文理分科 Description 文理分科是一件很纠结的事情!(虽然看到这个题目的人肯定都没有纠结过) 小P所在的班级要进行文理分科. 他的班级可以用一个n*m的矩阵进行描述,每个 ...

  8. BZOJ 2132 圈地计划(最小割)【BZOJ 修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2132 是 hydro 的 BZOJ ...

  9. 2018.11.06-知识回顾

    1.最小圆覆盖 #include<bits/stdc++.h> #define il inline #define D double #define _(d) while(d(isdigi ...

最新文章

  1. Android中后台定时任务实现,即时数据同步问题思考!
  2. 算法回顾(三) 二分查找
  3. COM和ATL学习方法
  4. 2017 [六省联考] T5 分手是祝愿
  5. hadoop2.6.4 在ubuntu14.04下的搭建
  6. oracle linux 版本 uek,在运行 Oracle Linux 7.1 UEK3 或 7.2 或者 RHEL 7.1 或 7.2 的系统上,RDMA 服务无法启动...
  7. PreScan笔记(1)——入坑之简单介绍和Demo
  8. jmeter导入已有的脚本_jmeter 开发导入excel脚本
  9. 原码一位乘法c语言程序,原码一位乘法与补码一位乘法
  10. php 七牛云获得上传token,客户端生成七牛上传token
  11. Matlab 查阅、读取nc数据
  12. 网络安全:为大家介绍5种常见的加密算法
  13. 微服务:注册中心ZooKeeper、Eureka、Consul 、Nacos对比
  14. arm neon优化
  15. 穷爸爸与富爸爸读后感(3)
  16. C练题笔记之:Leetcode-1184. 公交站间的距离
  17. 代码题--C++--最少立方数之和每个数最少可以写成几个数的立方和
  18. Mac M1 pro 安装 python2 教程
  19. js根据汉字拼音首字母排序分组
  20. 基于Linux下搭建NextCloud构建自己的私有网盘

热门文章

  1. 计算机除法和取余在实际运用中的意义
  2. 找到所有数组中消失的数字—leetcode448
  3. 深入理解C语言的函数调用过程
  4. OSTimeTick()函数解析
  5. define宏定义和const定义之间的区别
  6. J钓鱼 (vector + queue)
  7. java 模板实现原理,Java Web 模板代码生成器的设计与实现详解
  8. javascript number转string不用科学计数法_[JavaScript]之数据类型篇
  9. c++ map利用迭代器赋值
  10. 请举出OSI七层模型在实际应用中的实例