P4177 [CEOI2008]order

如果不能租机器,这就是最大权闭合子图的题:

给定每个点的$val$,并给出限制条件:如果取点$x$,那么必须取$y_1,y_2,y_3......$,满足$val_x>0,val_{y_i}<0$

求最大点权和。


对于一个图,跑过最小割(最大流)后

有若干个点与源点$S$仍连通,我们把这部分点集称为$S$割

与汇点$T$仍连通的点的点集,称为$T$割

我们把$S$割内的点视作被取走,$T$割内的点视为不被取。

考虑建个新图来表示点之间的关系

在图中,对于$val_i>0$的点$i$,我们做如下操作(link操作包含连边和反向边,即正常的网络流连边):

$link(S,i,val_i)$:如果该边在最小割中,那么$i$不属于$S$割,即该点没有被取

取$i$的同时必须取$k$,$link(i,k,inf)$:该边不可能在最小割中,表明$i$、$k$或是都被取,或是不取$i$

对于$val_i<0$的点:

$link(i,T,-val_i)$:如果该边在最小割中,那么$i$属于$S$割,取点$i$得到$-val_i$的贡献

在这样的图上跑最小割,我们就可以得出最小损失的代价$t$

答案即为$\sum_{i=1}^{\left | S \right |}val_i-t$(所有$val_i>0$的点$-$代价)


但是我们可以租机器了

设$cost_k$为租机器$k$的费用,那么我们可以把租机器看成:花费$cost_k$,让这道工序可以不用机器$k$

$link(i,k,inf)\rightarrow link(i,k,cost_k)$

蓝后就没了

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
void read(int &x){
char c=getchar();x=;
while(c<''||c>'') c=getchar();
while(''<=c&&c<='') x=x*+(c^),c=getchar();
}
#define N 200005
#define W 40000005
#define inf 1000000000
int n,m,w,tt,id,S,T,d[N],cur[N],tot;
bool vis[N];
queue <int> h;
int cnt=,hd[N],nxt[W],ed[N],poi[W],val[W];
inline void adde(int x,int y,int v){
nxt[ed[x]]=++cnt, hd[x]=hd[x]?hd[x]:cnt,
ed[x]=cnt, poi[cnt]=y, val[cnt]=v;
}
inline void link(int x,int y,int v){adde(x,y,v),adde(y,x,);}
bool bfs(){
memset(vis,,sizeof(vis));
h.push(S); vis[S]=;
while(!h.empty()){
int x=h.front();h.pop();
for(int i=hd[x];i;i=nxt[i]){
int to=poi[i];
if(!vis[to]&&val[i])
vis[to]=,d[to]=d[x]+,h.push(to);
}
}return vis[T];
}
int dfs(int x,int a){
if(x==T||a==) return a;
int F=,f;
for(int &i=cur[x];i;i=nxt[i]){
int to=poi[i];
if(d[to]==d[x]+&&(f=dfs(to,min(a,val[i])))>)
a-=f,F+=f,val[i]-=f,val[i^]+=f;
if(!a) break;//注意a==0要放到每次循环的最后判!
}return F;
}
int dinic(){
int re=;
while(bfs()){
for(int i=;i<=T;++i) cur[i]=hd[i];
re+=dfs(S,inf);
}return re;
}
int main(){
read(n);read(m); S=n+m+; T=S+;
for(int i=;i<=n;++i){
read(w);read(tt); link(S,i,w); tot+=w;
while(tt--) read(id),read(w),link(i,id+n,w);
}
for(int i=;i<=m;++i) read(w),link(i+n,T,w);
printf("%d",tot-dinic());
return ;
}

P4177 [CEOI2008]order(网络流)最大权闭合子图的更多相关文章

  1. Bzoj 1391: [Ceoi2008]order 网络流,最大权闭合图

    1391: [Ceoi2008]order Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1105  Solved: 331[Submit][Statu ...

  2. P4177 [CEOI2008]order 网络流,最小割,最大权闭合子图

    题目链接 \(Click\) \(Here\) 如果没有租用机器就是一个裸的最大权闭合子图.现在有了租用机器应该怎么办呢? 单独拆点是不行的,因为会和直接买下的情况脱离关系,租借是和连边直接相关的,那 ...

  3. BZOJ 4873 [Shoi2017]寿司餐厅 | 网络流 最大权闭合子图

    链接 BZOJ 4873 题解 当年的省选题--还记得蒟蒻的我Day1 20分滚粗-- 这道题是个最大权闭合子图的套路题.严重怀疑出题人就是先画好了图然后照着图编了个3000字的题面.和我喜欢的妹子当 ...

  4. 【BZOJ1565】【NOI2009】植物大战僵尸 网络流 最大权闭合子图

    题目大意 ​ 给你一个\(n\times m\)的地图,每个格子上都有一颗植物,有的植物能保护其他植物.僵尸从右往左进攻,每吃掉一颗植物就可以得到\(a_{i,j}\)的收益(\(a_{i,j}\)可 ...

  5. HihoCoder 1398 网络流 - 最大权闭合子图

    周末,小Hi和小Ho所在的班级决定举行一些班级建设活动. 根据周内的调查结果,小Hi和小Ho一共列出了N项不同的活动(编号1..N),第i项活动能够产生a[i]的活跃值. 班级一共有M名学生(编号1. ...

  6. FZU - 2295 Human life:网络流-最大权闭合子图-二进制优化-第九届福建省大学生程序设计竞赛

    目录 Catalog Solution: (有任何问题欢迎留言或私聊 && 欢迎交流讨论哦 http://acm.fzu.edu.cn/problem.php?pid=2295 htt ...

  7. 洛谷$P4177\ [CEOI2008]\ order$ 网络流

    正解:网络流 解题报告: 传送门$QwQ$ 开始看感$jio$长得好像和太空飞行计划差不多的,,,然后仔细康康发现还有租操作,,, 按一般的套路碰到这样儿的一般就先按非特殊化的建图然后考虑怎么实现这个 ...

  8. BZOJ1391/LG4177 「CEOI2008」order 最大权闭合子图

    问题描述 BZOJ1391 LG4177 题解 最大权闭合子图,本质是最小割 在任务和机器中间的边之前权值设为INF,代表不可违背这条规则 本题的租借就相当于允许付出一定代价,违背某个规则,只需要把中 ...

  9. BZOJ_1391_[Ceoi2008]order_最大权闭合子图

    BZOJ_1391_[Ceoi2008]order_最大权闭合子图 Description 有N个工作,M种机器,每种机器你可以租或者买过来. 每个工作包括若干道工序,每道工序需要某种机器来完成,你可 ...

随机推荐

  1. 使用Eureka作为springcloud的注册机

    使用springcloud做项目的负载均衡,需要导的jar这里不再显示,具体配置如下: 作为被注册服务配置: 启动多台服务端就可以实现集群,相应的localhost需要转成真实的ip 当然一个项目还要 ...

  2. Java中的常用集合类型总结

    1.可重复列表(List) LinkedList和ArrayList的区别:http://www.importnew.com/6629.html ArrayList vs. LinkedList vs ...

  3. DDoS攻击及防御措施

    SYN flood 伪造大量的源IP地址,分别向服务器端发送大量的SYN包,此时服务器端会返回SYN/ACK 包,因为伪造的IP并不会答应,服务器端并没有收到伪造的IP的回应,会重试3~5次并等待一个 ...

  4. java-方法重载、参数传递、

    1.Java的方法重载overload:同一个类内,可以有多个同名的方法,只要参数不同即可(包括参数类型和个数.多类型顺序) 2.基本类型(8种:byte\short\int\long\double\ ...

  5. RoR - Action Pack

    什么是Action Pack: Rest and Rails: Rest if all about resources rake routes:  print out all routes

  6. 用web技术写APP

    _ 听说会写web的人也能写APP, 抱着尝试的心态踏上路体验一番 http://www.ionic.wang/start-index.html 0x00 框架环境介绍 ionic是什么? https ...

  7. AD、PADS、Cadence对比

    本人平时主要接触的是FPGA设计,最近找工作发现有些企业要求会画PCB电路,所以开始学习相关工具软件.主流软件是Altium Designer,PADS和Cadence这三个. 三大工具的用途: AD ...

  8. SharePoint 2010 查看dll的PublicKeyToken值方法

    在做asp.net开发过程中,偶尔对有些dll,进行强制签名,那么在注册dll到gac的时候,就需要知道dll的PublicKeyToken值,如何通过简单的方法,来获得这个值呢,下面是一个很好又实用 ...

  9. JavaScript基本概念

    JavaScript概念:JavaScript是一个弱类型语言,而且不要进行编译,是解释性语言.JavaScript最初是为了处理一些相较简单的数据验证,从而减少客户端与服务器端的通信提升效率,发展至 ...

  10. MATLAB矩阵运算

    1. 矩阵的加减乘除和(共轭)转置 (1) 矩阵的加法和减法 如果矩阵A和B有相同的维度(行数和列数都相等),则可以定义它们的和A+B以及它们的差A-B,得到一个与A和B同维度的矩阵C,其中Cij=A ...