BZOJ3438小M的作物——最小割
题目描述
输入
输出
只有一行,包括一个整数,表示最大收益
样例输入
4 2 1
2 3 2
1
2 3 2 1 2
样例输出
样例解释A耕地种1,2,B耕地种3,收益4+2+3+2=11。
1<=k< n<= 1000,0 < m < = 1000 保证所有数据及结果不超过2*10^9。
#include<set>
#include<map>
#include<queue>
#include<stack>
#include<cmath>
#include<cstdio>
#include<vector>
#include<bitset>
#include<cstring>
#include<iostream>
#include<algorithm>
#define INF 0x3f3f3f3f
#define ll long long
using namespace std;
int head[4000];
int to[4000000];
int next[4000000];
int val[4000000];
int d[4000];
int q[4000];
int back[4000];
int S,T;
int x,y,k;
int n,m;
int tot=1;
int ans;
void add(int x,int y,int v)
{
tot++;
next[tot]=back[x];
back[x]=tot;
to[tot]=y;
val[tot]=v;
tot++;
next[tot]=back[y];
back[y]=tot;
to[tot]=x;
val[tot]=0;
}
bool bfs(int S,int T)
{
int r=0;
int l=0;
memset(d,-1,sizeof(d));
q[r++]=T;
d[T]=2;
while(l<r)
{
int now=q[l];
for(int i=back[now];i;i=next[i])
{
if(d[to[i]]==-1&&val[i^1]!=0)
{
d[to[i]]=d[now]+1;
q[r++]=to[i];
}
}
l++;
}
if(d[S]==-1)
{
return false;
}
else
{
return true;
}
}
int dfs(int x,int flow)
{
if(x==T)
{
return flow;
}
int now_flow;
int used=0;
for(int &i=head[x];i;i=next[i])
{
if(d[to[i]]==d[x]-1&&val[i]!=0)
{
now_flow=dfs(to[i],min(flow-used,val[i]));
val[i]-=now_flow;
val[i^1]+=now_flow;
used+=now_flow;
if(now_flow==flow)
{
return flow;
}
}
}
if(used==0)
{
d[x]=-1;
}
return used;
}
int dinic()
{
int res=0;
while(bfs(S,T))
{
memcpy(head,back,sizeof(back));
res+=dfs(S,0x3f3f3f3f);
}
return res;
}
int main()
{
scanf("%d",&n);
S=n+1;
T=n+2;
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
add(S,i,x);
ans+=x;
}
for(int i=1;i<=n;i++)
{
scanf("%d",&x);
add(i,T,x);
ans+=x;
}
scanf("%d",&m);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&k,&x,&y);
add(S,n+2+i,x);
ans+=x;
add(n+2+i+m,T,y);
ans+=y;
for(int j=1;j<=k;j++)
{
scanf("%d",&x);
add(n+2+i,x,INF);
add(x,n+2+i+m,INF);
}
}
printf("%d",ans-dinic());
}
BZOJ3438小M的作物——最小割的更多相关文章
- 【BZOJ3438】小M的作物 最小割
[BZOJ3438]小M的作物 Description 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子 有1个(就是可以种一棵作物)(用1. ...
- 【BZOJ-3438】小M的作物 最小割 + 最大权闭合图
3438: 小M的作物 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 825 Solved: 368[Submit][Status][Discuss ...
- BZOJ 3438: 小M的作物( 最小割 )
orz出题人云神... 放上官方题解... 转成最小割然后建图跑最大流就行了... ---------------------------------------------------------- ...
- 3438: 小M的作物[最小割]
3438: 小M的作物 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1073 Solved: 465[Submit][Status][Discus ...
- P1361 小M的作物 最小割理解
如果没有组合效益的存在 我们直接每个点两部分的最大值即可 换成网络流模型来看 即把S点看作是A田 把T点看作是B田 每种作物看作一个点 分别连边(S,i,A[i]) (i,T,B[i]) 最后图中所有 ...
- 洛谷 - P1361 - 小M的作物 - 最小割 - 最大权闭合子图
第一次做最小割,不是很理解. https://www.luogu.org/problemnew/show/P1361 要把东西分进两类里,好像可以应用最小割的模板,其中一类A作为源点,另一类B作为汇点 ...
- [P1361] 小M的作物 - 最小割
没想到今天早上的第一题网络流就血了这么多发 从经典的二选一问题上魔改 仍然考虑最小割 #include <bits/stdc++.h> using namespace std; #defi ...
- 小M的作物 最小割最大流
题目描述 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子有1个(就是可以种一棵作物)(用1...n编号). 现在,第i种作物种植在A中种植可 ...
- BZOJ3438 小M的作物(最小割)
题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=3438 Description 小M在MC里开辟了两块巨大的耕地A和B(你可以认为 ...
随机推荐
- Nginx+keepalived高可用配置实战(内附彩蛋)
1.整体架构图如下 2.环境准备 今天所配置的是keepalived+nginx 的负载均衡 下载keepalived软件 [root@LB01 tools]# wget http://www.kee ...
- java.util.Stack类中 empty() 和 isEmpty() 方法的作用
最近在学习算法和数据结构,用到Java里的Stack类,但程序运行结果一直和我预料的不一样,网上也没查清楚,最后查了API,才搞明白. java.util.Stack继承类 java.util.Vec ...
- Class AtomicInteger
Overview Package Class Use Tree Deprecated Index Help Java™ PlatformStandard Ed. 7 Prev Class Next C ...
- 针对2017年淘宝开放平台应用整改被封停或强制入塔政策实现不入塔不模糊正常调用API的解决方案
淘宝开放平台入驻先是限制上架,提高入驻资质,然后又模糊化R2信息,强制入塔,如今开始大规模整改应用. 此次整改势必导致很大一批个人开发的应用无法使用. 在此本人有偿提供正常调用淘宝开放平台API的解决 ...
- ImageProcessor组件
ImageProcessor组件 开源免费的.NET图像即时处理的组件ImageProcessor 承接以前的组件系列,这个组件系列旨在介绍.NET相关的组件,让大家可以在项目中有一个更好的选择, ...
- 使用 Drools 和 JPA & Drools show case in docker hub
使用 Drools 和 JPA 实现持续的实时数据分析https://www.ibm.com/developerworks/cn/java/j-drools5/index.html Drools - ...
- CentOS查看和修改PATH环境变量的方法 profile
https://blog.csdn.net/dongheli/article/details/83987092
- Android下的软件合集
在平常使用Android手机的时候,选择一个好的软件可以做到事半功倍的效果,所以在此总结一下,加速我们的工作与生活效率 1) ConnectBot ConnectBot是一个Android操作系统上的 ...
- node path
1.path.basename(path[, ext]) ● path <string> ● ext <string> An optional file extension ● ...
- Docker以及K8S学习总结----From各位大神...
Docker的安装使用. 1. 修改yum源到境内站点: wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/re ...