BZOJ3438 小M的作物
AC通道:http://www.lydsy.com/JudgeOnline/problem.php?id=3438
这题觉得和上题有点类似吧。
如果没有联合在一起的收成,可以比较好做[我们将属于A的表示到s集中,属于B的表示到t集中]:
s往所有i连a[i],所有i往t连b[i]。
这样的话,割集表示不选哪些,最后答案就是ans-最小割
现在考虑联合在一起的收成。
我们对于收成(wa,wb),我们把它拆成两个点u,v,一个与s相连,边权为wa,另一个与t相连,边权为wb。
但是我们需要保证当我选择wa的收益时,需要将令所有关于它的点都不能放在t集合里;当我们选择wb的收益时,需要令所有关于它的点都不在s集合里。
那么怎么构图呢?
就将u往所有相关的i连一条INF的边,所有i往v连一条INF的边。
自从看了那篇有趣的博客,我觉得画图就应该这样画意识流...
这一题RE了很多次,原因就是数组开小了。
边集究竟有多大呢?以最坏的恶意,那么每个收益都是全体点的,那么就是m*n*2条边,然后每个点也要连出去两条,就是(m*n*2+n*2)*2=(2000000+2000)*2=4004000,然后总共的点数是n+2*m=3000个点。
以后要多想一想再来开数组啊....
#include<cstdio>
#include<cstring>
#include<algorithm> using namespace std; inline int in(){
int x=;char ch=getchar();
while(ch>'' || ch<'') ch=getchar();
while(ch>='' && ch<='') x=x*+ch-'',ch=getchar();
return x;
} const int maxn=;
const int INF=0x3f3f3f3f; struct Node{
int data,next,low;
}node[]; #define now node[point].data
#define then node[point].next
#define www node[point].low int n,m,cnt,ans;
int s,t,Idex;
int w1[maxn],w2[maxn];
int cur[maxn],head[maxn];
int dis[maxn],que[maxn]; void add(int u,int v,int w){
node[cnt].data=v;node[cnt].next=head[u];node[cnt].low=w;head[u]=cnt++;
node[cnt].data=u;node[cnt].next=head[v];node[cnt].low=;head[v]=cnt++;
} bool BFS(){
memset(dis,-,sizeof(dis));
int H=,T=;que[]=,dis[]=;
while(H<T){
H++;
for(int point=head[que[H]];point!=-;point=then)
if(www && dis[now]<){
dis[now]=dis[que[H]]+;
que[++T]=now;
}
}
return dis[t]>;
} int dfs(int x,int low){
if(x==t) return low;
int Low;
for(int &point=cur[x];point!=-;point=then)
if(www && dis[now]==dis[x]+){
Low=dfs(now,min(low,www));
if(Low){
www-=Low,node[point^].low+=Low;
return Low;
}
}
return ;
} int main(){
#ifndef ONLINE_JUDGE
freopen("3438.in","r",stdin);
freopen("3438.out","w",stdout);
#endif n=in();
for(int i=;i<=n;i++) w1[i]=in(),ans+=w1[i];
for(int i=;i<=n;i++) w2[i]=in(),ans+=w2[i];
m=in();
t=n+(m<<)+;
for(int i=s;i<=t;i++) head[i]=-;
for(int i=;i<=n;i++)
add(s,i,w1[i]),add(i,t,w2[i]);
Idex=n;
int k,wa,wb,x;
for(int i=;i<=m;i++){
k=in(),wa=in(),wb=in();
Idex++;add(s,Idex,wa);ans+=wa;
Idex++;add(Idex,t,wb);ans+=wb;
while(k--){
x=in();
add(Idex-,x,INF),add(x,Idex,INF);
}
}
int flag;
while(BFS()){
for(int i=s;i<=t;i++) cur[i]=head[i];
while(){
flag=dfs(s,INF);
if(!flag) break;
ans-=flag;
}
}
printf("%d",ans);
return ;
}
BZOJ3438 小M的作物的更多相关文章
- bzoj3438: 小M的作物(那年花开最小割)
3438: 小M的作物 题目:传送门 题解: 最小割标准水题(做了几天的最小割之后表示是真的水) 为什么水:博主已经做过两道基本一样的题目了... 详情参考:bzoj3894 代码: #include ...
- BZOJ3438 小M的作物(最小割)
题目 Source http://www.lydsy.com/JudgeOnline/problem.php?id=3438 Description 小M在MC里开辟了两块巨大的耕地A和B(你可以认为 ...
- BZOJ3438小M的作物——最小割
题目描述 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子 有1个(就是可以种一棵作物)(用1...n编号),现在,第i种作物种植在A中种植可 ...
- BZOJ3438 小M的作物(和拓展)
题目链接:戳我 我们如果要选择一种种植情况的话,一定是其他的选择都不可行了.这种决策问题用最小割来处理最好不过. 建图方式--A为源点,B为汇点.然后将每个点分别向A,B连边,边权为种植它的价值.组合 ...
- 【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 ...
- 「BZOJ3438」小M的作物(最小割
3438: 小M的作物 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1891 Solved: 801[Submit][Status][Discus ...
- BZOJ 3438: 小M的作物( 最小割 )
orz出题人云神... 放上官方题解... 转成最小割然后建图跑最大流就行了... ---------------------------------------------------------- ...
- P1361 小M的作物
P1361 小M的作物 题目描述 小M在MC里开辟了两块巨大的耕地A和B(你可以认为容量是无穷),现在,小P有n中作物的种子,每种作物的种子有1个(就是可以种一棵作物)(用1...n编号). 现在,第 ...
随机推荐
- Entity Framework中的多个库操作批量提交、事务处理
在Entity Framework 中使用SaveChanges()是很频繁的,单次修改或删除数据后调用SaveChanges()返回影响记录数. 要使用批量修改或者批量删除数据,就需要SaveCha ...
- source insight用于C语言编程的工具脚本
简单来说,source insight提供的功能功能还不够傻瓜,用起来还不够方便,所以写了此脚本,提高开发效率. 部分source insight提供的功能也包含了进来,主要是因为我不喜欢使用太多的快 ...
- LotusPhp中配置文件组件LtConfig详解
LotusPhp中配置文件组件LtConfig是约定的一个重要组成部分,适用于多个场景,多数的LotusPhp组件如数据库,缓存,RBAC,表单验证等都需要用到配置组件,LtConfig配置组件也是L ...
- 发布阿里云OSS for phpcmsV9整合教程
说明:这个算不上是插件,因为没有安装包,需要手工修改代码. 还有一点就是后台发布文章时上传的附件还是会保存在你的服务器上,基于以下原因: 1.个人的需求是前台页面需要使用thumb函数生成多个缩略图大 ...
- 9)Java内部类(Inner Class)
内部类:不可以有静态数据,静态方法或者又一个静态内部类 内部类的优点:隐藏类的细节,内部类可以声明为私有.内部类可以访问外部类的对象(包括private) 静态内部类:可以有静态数据,静 ...
- php框架学习的步骤
一,选择一个合适的php框架 在国内,使用zf,ci和tp框架的人比较多,新手可以从中选一个去学习,新手不建议一开始就去学习zf,功力还不够深,学习zf会让你更迷茫. 二,选定一个php框架之后,如何 ...
- javascript雪花效果 注释版
(function () { // 添加事件监听器 function addEvent(a, b, c) { if (a.addEventListener) a.addEventListener(b, ...
- 【javascript】随手记代码
//js实现的当前界面的刷新.前进.后退 <input type="button" value="刷新" onclick="window.loc ...
- WPF:定制Checkbox样式,让“正确”绿得好看,让“错误”红的显眼
WPF提供了样式.模板.触发器.状态管理.矢量形状等方式,让我们不需要背景图片,也可以轻松定制控件的风格样式.下面是笔者针对Checkbox进行的样式定制,让“正确”绿得好看,让“错误”红的显眼. ...
- JavaWeb之 JSP:内置对象,EL表达式,JSP标签基础
JSP的内置对象 什么是JSP的内置对象呢? 在JSP页面进行编程的时候,如果我们要使用一些对象,如:HttpSession,ServletConfig,ServletContext这些对象,如果每次 ...