[P1361] 小M的作物 - 最小割
没想到今天早上的第一题网络流就血了这么多发
从经典的二选一问题上魔改 仍然考虑最小割

#include <bits/stdc++.h>
using namespace std;
#define int long long
const int N = 163840, MAXN = 2602144;
#define reset(x) memset(x,0,sizeof x)
namespace solver {
struct graph {
int n,m,M,S,T,head[N],cur[N],dep[N],gap[N],q[N];
long long ans;
struct ed {
int to,nxt,val;
} edge[MAXN];
void init(int n0,int m0,int S0,int T0) {
n=n0,m=m0,S=S0,T=T0,M=1,reset(gap);
reset(head),reset(cur),reset(dep),reset(q);
}
void make(int u,int v,int w) {
edge[++M]=(ed) {v,head[u],w},head[u]=M;
}
int dfs(int u,int mx) {
if (u==T)
return mx;
int num=0,f;
for (int &i=cur[u],v; i; i=edge[i].nxt)
if (dep[v=edge[i].to]==dep[u]-1 && (f=edge[i].val))
if (edge[i].val-=(f=dfs(v,min(mx-num,f))), edge[i^1].val+=f, (num+=f)==mx)
return num;
if (!--gap[dep[u]++])
dep[S]=n+1;
return ++gap[dep[u]],cur[u]=head[u],num;
}
void solve() {
for (int i=1; i<=n; ++i)
cur[i]=head[i];
ans=0;
for (gap[0]=n; dep[S]<=n; ans+=dfs(S,0x7fffffff));
}
} g;
int n,m,S,T,t1,t2,t3;
void init() {
g.init(n,m,S,T);
}
int solve() {
g.solve();
return g.ans;
}
void make(int t1,int t2,int t3) {
g.make(t1,t2,t3);
g.make(t2,t1,0);
}
} // namespace solver
int n,a[10005],b[10005],m,c[10005][2];
signed main() {
int ans = 0;
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i], ans+=a[i];
for(int i=1;i<=n;i++) cin>>b[i], ans+=b[i];
cin>>m;
solver::n = n+m*2+2;
solver::S = n+m*2+1;
solver::T = n+m*2+2;
solver::init();
for(int i=1;i<=n;i++) solver::make(n+m*2+1, i, a[i]);
for(int i=1;i<=n;i++) solver::make(i, n+m*2+2, b[i]);
for(int i=1;i<=m;i++) {
int k;
cin>>k>>c[i][0]>>c[i][1];
ans += c[i][0] + c[i][1];
solver::make(n+m*2+1, n+i*2-1, c[i][0]);
solver::make(n+i*2, n+m*2+2, c[i][1]);
while(k--) {
int tmp;
cin>>tmp;
solver::make(n+i*2-1,tmp,2e9+10);
solver::make(tmp,n+i*2,2e9+10);
}
}
cout<<ans - solver::solve()<<endl;
}
[P1361] 小M的作物 - 最小割的更多相关文章
- 洛谷 - P1361 - 小M的作物 - 最小割 - 最大权闭合子图
第一次做最小割,不是很理解. https://www.luogu.org/problemnew/show/P1361 要把东西分进两类里,好像可以应用最小割的模板,其中一类A作为源点,另一类B作为汇点 ...
- P1361 小M的作物 最小割理解
如果没有组合效益的存在 我们直接每个点两部分的最大值即可 换成网络流模型来看 即把S点看作是A田 把T点看作是B田 每种作物看作一个点 分别连边(S,i,A[i]) (i,T,B[i]) 最后图中所有 ...
- BZOJ 3438: 小M的作物( 最小割 )
orz出题人云神... 放上官方题解... 转成最小割然后建图跑最大流就行了... ---------------------------------------------------------- ...
- BZOJ3438小M的作物——最小割
题目描述 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子 有1个(就是可以种一棵作物)(用1...n编号),现在,第i种作物种植在A中种植可 ...
- 【BZOJ3438】小M的作物 最小割
[BZOJ3438]小M的作物 Description 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子 有1个(就是可以种一棵作物)(用1. ...
- 3438: 小M的作物[最小割]
3438: 小M的作物 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1073 Solved: 465[Submit][Status][Discus ...
- 【BZOJ-3438】小M的作物 最小割 + 最大权闭合图
3438: 小M的作物 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 825 Solved: 368[Submit][Status][Discuss ...
- 小M的作物 最小割最大流
题目描述 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子有1个(就是可以种一棵作物)(用1...n编号). 现在,第i种作物种植在A中种植可 ...
- P1361 小M的作物
P1361 小M的作物 题目描述 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子有1个(就是可以种一棵作物)(用1...n编号). 现在,第 ...
随机推荐
- 开源工作流管理系统节点接收人设置“指定节点处理人”系列讲解
关键字: 驰骋工作流程快速开发平台 工作流程管理系统 工作流引擎 asp.net工作流引擎 java工作流引擎. 开发者表单 拖拽式表单 工作流系统CCBPM节点访问规则接收人规则 适配数据库: o ...
- STM32之RGB灯仿真
实验目的 点灯是练习GPIO输出的最佳实验.由于疫情期间没法返校,手头上没有现成的实验板,于是借助Proteus进行仿真.本实验点的不是普通的灯,而是RGB混色灯,实现多种颜色的显示.后期还可以加上P ...
- 邓士鹏【MySql大全】
禁止使用系统关键字: typename 1.计算两个日期的时间差函数 SELECT TIMESTAMPDIFF(MONTH,'2009-10-01','2009-09-01'); interval可是 ...
- springboot 查看H2数据库
1 再application.properties文件中,添加 spring.h2.console.enabled=true 2 再浏览器中打开: http://localhost:8080/h2- ...
- Angular4.0环境搭建
1.安装nodejs 先装nodejs,如果你的电脑已经装过了,最好确认是比较新的版本,否则可能会出问题 下载地址:https://nodejs.org/en/download/ 安装过程很简单,一直 ...
- Neo4j入门-开始使用
前言 关系,指事物之间相互作用.相互影响的状态. 数据之间的关系也是如此,数据之间关系的存储在RDS就已经开始.从数据库支持的外键,到手动建立的关系表,人们采取了许多方法,只为了解决查询复杂.缓慢等问 ...
- Linux-redis安装以及客户端搭建
redis安装: 下载redis数据库,网址:redis官网 将文件放到home或者其他文件夹,cd到文件夹 执行 tar zxvf redis-4.0.2.tar.gz //解压文件 执行make进 ...
- Linux 文件(持续更新)
一.文件类型 Linux操作系统把所有内容(文件.图片.视频.设备)都当作文件看待.处理,即一切皆文件. Linux系统把所有文件分为七种类型: 文件类型 文件类型标识 说明 使用ls -l命令查看文 ...
- excel的count、countif、sunif、if
一.count统计数值个数 格式:count(指定区域) , 例如:count(B2:G5) 二.countif统计数值满足条件个数 格式:COUNTIF(条件区域,指定条件) ,例如:count ...
- 简单CSS的应用
今天主要学习了一些关于CSS的内容 通过css调试了一个简单的表格 <%@ page language="java" contentType="text/html; ...