【BZOJ-3438】小M的作物 最小割 + 最大权闭合图
3438: 小M的作物
Time Limit: 10 Sec Memory Limit: 256 MB
Submit:
825 Solved: 368
[Submit][Status][Discuss]
Description
Input
Output
只有一行,包括一个整数,表示最大收益
Sample Input
4 2 1
2 3 2
1
2 3 2 1
2
Sample Output
样例解释A耕地种1,2,B耕地种3,收益4+2+3+2=11。
1<=k< n<=
1000,0 < m < = 1000 保证所有数据及结果不超过2*10^9。
HINT
Source
Solution
这不是傻逼题??
有种“文理分科”的既视感,反正也差不多TAT
又是最大全闭合图
对于单个作物 连S-->x 表示种在A中,容量为收益, x-->T 表示种在B中容量为收益
对于多种集合 新建一个总点 S-->a' 表示都种在A,容量为收益, 再由a‘连所有集合中的点, b’-->T 原理一样
最后ans=tot-mincut
Code
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<queue>
using namespace std;
int read()
{
int x=,f=; char ch=getchar();
while (ch<'' || ch>'') {if (ch=='-') f=-; ch=getchar();}
while (ch>='' && ch<='') {x=x*+ch-''; ch=getchar();}
return x*f;
}
#define maxm 3000010
#define maxn 3010
int n,m,tot;
struct EdgeNode{int next,to,cap;}edge[maxm];
int head[maxn],cnt=;
void add(int u,int v,int w) {cnt++; edge[cnt].next=head[u]; head[u]=cnt; edge[cnt].to=v; edge[cnt].cap=w;}
void insert(int u,int v,int w) {add(u,v,w); add(v,u,);}
#define inf 0x7fffffff
int dis[maxn],cur[maxn],S,T;
bool bfs()
{
queue<int>q;
for (int i=S; i<=T; i++) dis[i]=-;
q.push(S); dis[S]=;
while (!q.empty())
{
int now=q.front(); q.pop();
for (int i=head[now]; i; i=edge[i].next)
if (edge[i].cap && dis[edge[i].to]==-)
dis[edge[i].to]=dis[now]+,q.push(edge[i].to);
}
return dis[T]!=-;
}
int dfs(int x,int low)
{
if (x==T) return low;
int used=,w;
for (int i=cur[x]; i; i=edge[i].next)
if (edge[i].cap && dis[edge[i].to]==dis[x]+)
{
w=dfs(edge[i].to,min(edge[i].cap,low-used));
edge[i].cap-=w; edge[i^].cap+=w; used+=w;
if (edge[i].cap) cur[x]=i; if (low==used) return used;
}
if (!used) dis[x]=-;
return used;
}
int dinic()
{
int tmp=;
while (bfs())
{
for (int i=S; i<=T; i++) cur[i]=head[i];
tmp+=dfs(S,inf);
}
return tmp;
}
int a[maxn],b[maxn];
int main()
{
n=read();
for (int x,i=; i<=n; i++) a[i]=read(),tot+=a[i];
for (int x,i=; i<=n; i++) b[i]=read(),tot+=b[i];
m=read();
S=,T=n+*m+;
for (int i=; i<=n; i++) insert(S,i,a[i]),insert(i,T,b[i]);
for (int nn,x,y,i=; i<=m; i++)
{
nn=read(); x=read(),y=read(); tot+=x+y;
insert(S,++n,x); insert(++n,T,y);
for (int z,j=; j<=nn; j++) z=read(),insert(z,n,inf),insert(n-,z,inf);
}
printf("%d\n",tot-dinic());
return ;
}
【BZOJ-3438】小M的作物 最小割 + 最大权闭合图的更多相关文章
- BZOJ 3438: 小M的作物( 最小割 )
orz出题人云神... 放上官方题解... 转成最小割然后建图跑最大流就行了... ---------------------------------------------------------- ...
- 洛谷 - P1361 - 小M的作物 - 最小割 - 最大权闭合子图
第一次做最小割,不是很理解. https://www.luogu.org/problemnew/show/P1361 要把东西分进两类里,好像可以应用最小割的模板,其中一类A作为源点,另一类B作为汇点 ...
- 3438: 小M的作物[最小割]
3438: 小M的作物 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1073 Solved: 465[Submit][Status][Discus ...
- HDU 3879 && BZOJ 1497:Base Station && 最大获利 (最大权闭合图)
http://acm.hdu.edu.cn/showproblem.php?pid=3879 http://www.lydsy.com/JudgeOnline/problem.php?id=1497 ...
- BZOJ 3438 小M的作物 & BZOJ 1877 [SDOI2009]晨跑
我由衷地为我的朋友高兴.哈哈,yian,当你nick name破百上千时,再打“蒟蒻”就会被打的. 好的,说正事吧.请注意,这还是题解.但我发现,网络流实在是太套路了(怪不得这两年几乎销声匿迹).我们 ...
- 【POJ 2987】Firing (最小割-最大权闭合子图)
裁员 [问题描述] 在一个公司里,老板发现,手下的员工很多都不务正业,真正干事员工的没几个,于是老板决定大裁员,每开除一个人,同时要将其下属一并开除,如果该下属还有下属,照斩不误.给出每个人的贡献值和 ...
- 【BZOJ-1391】order 最小割 + 最大全闭合图
1391: [Ceoi2008]order Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 1334 Solved: 405[Submit][Statu ...
- POJ 2987 Firing(最大流最小割の最大权闭合图)
Description You’ve finally got mad at “the world’s most stupid” employees of yours and decided to do ...
- BZOJ3438小M的作物——最小割
题目描述 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子 有1个(就是可以种一棵作物)(用1...n编号),现在,第i种作物种植在A中种植可 ...
随机推荐
- Kubernetes deployed on multiple ubuntu nodes
This document describes how to deploy kubernetes on multiple ubuntu nodes, including 1 master node a ...
- 配置Tomcat使用Redis作为session管理
1. 在 tomcat/lib 中增加以下jar包 commons-pool2-.jar jedis-.jar tomcat-redis-session-manager-.jar 2. 修改tomca ...
- 04Spring_bean 后处理器(后处理Bean),BeanPostProcessor ,bean创建时序,动态代理
这篇文章很重要,讲解的是动态代理,以及bean创建前后的所发生的事情.介绍一个接口:在Spring构造Bean对象过程中,有一个环节对Bean对象进行 后处理操作 (钩子函数) ----- Sprin ...
- [py]文件 字符串 列表特例
文件 readlines 列表 readline 字符串 read 字符串 列表---拆分---小列表 f=file('test.log','r') for line in f.readlin ...
- linux:nohup 不生成 nohup.out的方法
nohup java -jar /xxx/xxx/xxx.jar >/dev/null 2>&1 & 关键在于最后的 >/dev/null 2>&1 部 ...
- java:POI导出excel
POI是一个开源项目,专用于java平台上操作MS OFFICE,企业应用开发中可用它方便导出Excel. 下面是使用示例: 1.maven中先添加依赖项 <dependency> < ...
- mybatis 3.2.8 + log4j2.0.2 控制台输出sql语句
mybatis3.2.7有一个bug,使用log4j2 (2.0.2)版本时,会找不到类 ,导致启动失败,详见 https://github.com/mybatis/mybatis-3/issues/ ...
- 关于开发中 hosts 文件的修改
这篇文章只是给自己做个笔记吧. 最近的工作经常要改 hosts 文件(C:\Windows\System32\drivers\etc\hosts),并且改完后不立即生效.小胡子哥 提到: 因为服务器设 ...
- TM4C123G红外触摸屏:开发板好不容易实现了原理,放到专家设计的板子上无法运行,于是专家跑路项目黄了
使用TI的TM4C123G LaunchPad开发板,USB接口,来对同样的芯片进行烧写. 我们只用烧写那一块功能,不用另外一个芯片的开发功能,需要跳线 源码项目: 从官方网站TM4C123G ...
- IDEA【 MyBatis Plugin】 插件免费完美运行
mybatis_plus.jar 包 .Install plugin from disk...导入即能用. BaiDu云: 链接: http://pan.baidu.com/s/1geKtTbP 密码 ...