没想到今天早上的第一题网络流就血了这么多发

从经典的二选一问题上魔改 仍然考虑最小割

#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的作物 - 最小割的更多相关文章

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

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

  2. P1361 小M的作物 最小割理解

    如果没有组合效益的存在 我们直接每个点两部分的最大值即可 换成网络流模型来看 即把S点看作是A田 把T点看作是B田 每种作物看作一个点 分别连边(S,i,A[i]) (i,T,B[i]) 最后图中所有 ...

  3. BZOJ 3438: 小M的作物( 最小割 )

    orz出题人云神... 放上官方题解... 转成最小割然后建图跑最大流就行了... ---------------------------------------------------------- ...

  4. BZOJ3438小M的作物——最小割

    题目描述 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子 有1个(就是可以种一棵作物)(用1...n编号),现在,第i种作物种植在A中种植可 ...

  5. 【BZOJ3438】小M的作物 最小割

    [BZOJ3438]小M的作物 Description 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子 有1个(就是可以种一棵作物)(用1. ...

  6. 3438: 小M的作物[最小割]

    3438: 小M的作物 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1073  Solved: 465[Submit][Status][Discus ...

  7. 【BZOJ-3438】小M的作物 最小割 + 最大权闭合图

    3438: 小M的作物 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 825  Solved: 368[Submit][Status][Discuss ...

  8. 小M的作物 最小割最大流

    题目描述 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子有1个(就是可以种一棵作物)(用1...n编号). 现在,第i种作物种植在A中种植可 ...

  9. P1361 小M的作物

    P1361 小M的作物 题目描述 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子有1个(就是可以种一棵作物)(用1...n编号). 现在,第 ...

随机推荐

  1. StarUML之八、StarUML的Entity-Relationship Diagram(实体关系图)示例

    数据库表关系设计也是常有场景,本章介绍如何设计一个实体关系图 1:新建项目,在Model Explore中Add Diagram | ER Diagram到指定的元素中: 2:从Toolbox中创建E ...

  2. npm安装Vue.js

    我之前是有安装过npm的 使用淘宝 NPM 镜像 $ npm install -g cnpm --registry=https://registry.npm.taobao.org 查看nmp版本 $ ...

  3. Flink中逻辑计划和物理计划的概念划分和对应关系

    逻辑计划 logicGraph或者jobGraph,其端点为operator,edge为数据流向. operator往往代表一个函数. 同一个分区内的具有连续上下游关系的函数组成operator-ch ...

  4. 关于js获取元素在屏幕中的位置的方法

    针对我们获取元素在页面中的位置的问题,我们还是用老师一峰老师的方法来解决吧 下面上HTML代码 <div class="left_footer"> <p data ...

  5. Centos7 防火墙开放端口,查看状态,查看开放端口

    CentOS7 端口的开放关闭查看都是用防火墙来控制的,具体命令如下: 查看防火墙状态:(active (running) 即是开启状态) [root@WSS bin]# systemctl fire ...

  6. jsp的九大内置对象+四大作用域

    1.request是httpServletRequest的对象,代表发送的请求信息 2.response是httpServletResponse的对象,代表响应请求返回的信息 3.session会话是 ...

  7. XmlDocument vs XElement

    var xmlstr = @"<xml> <AppId>some_appid</AppId> <CreateTime>1413192605&l ...

  8. P5016 龙虎斗

    链接:P5016 ------------------------------------ 作为2019年的模拟,还是有必要写一些的 --------------------------------- ...

  9. opencv —— normalize 矩阵归一化

    归一化:就是将数据通过某种算法,限制需要的一定范围内. 归一化的目的:简而言之,是使得没有可比性的数据变得具有可比性,同时又保持相比较的两个数据之间的相对关系,如大小关系:或是为了作图,原来很难在一张 ...

  10. 安装MongoDB到Ubuntu(APT)

    运行环境 系统版本:Ubuntu 16.04.5 LTS 软件版本:mongodb-org-4.0.8 硬件要求:无 安装过程 1.配置APT-Mongodb存储库 ATP-Mongodb存储库由Mo ...