既然是最小费用最大流我们就用最大流来限制其一定能把每天跑满,那么把每个表示天的点向T连流量为其所需餐巾,费用为0的边,然后又与每天的餐巾对于买是无限制的因此从S向每个表示天的点连流量为INF,费用为一个餐巾的费用的边,然后我们考虑怎么用旧餐巾,我们用旧餐巾,要既不影响本点流量,也不影响本点费用,因此我们在开一坨点表示其对应得那天的旧餐巾,并通过他向离他快洗和离他慢洗天数的天的点连边,流量为Inf,费用为快洗、慢洗的费用,然后对于多余的旧餐巾,我们在一排天点中间从第一天连续地连到最后一天,流量为Inf,费用为0,那么由于只有我们的天点连到了T,因此他一定跑满,即一定满足需求,那么我们从S,向每个旧餐巾点连流量为它对应的天的需求。

注意t=1

#include <cstdio>
#include <queue>
#include <cstring>
#define MAXN 1510
#define Inf 0x3f3f3f3f
using namespace std;
inline int read(){
register int sum=;register char ch=getchar();
while(ch<''||ch>'')ch=getchar();
while(ch>=''&&ch<='')sum=(sum<<)+(sum<<)+ch-'',ch=getchar();
return sum;
}
struct Via{
int to,next,f,c,from;
}c[];
int head[],t=,n,S,T;
bool in[];
queue<int>q;
int dis[],pre[];
inline int Min(int x,int y){
return x<y?x:y;
}
inline void add(int a,int b,int C,int d){
c[++t].to=b,c[t].next=head[a],head[a]=t,c[t].f=C,c[t].c=d,c[t].from=a;
}
inline void Init(){
n=read(),S=n+n+,T=S+;
for(register int i=,x;i<=n;i++)x=read(),add(S,i+n,x,),add(i+n,S,,),add(i,T,x,),add(T,i,,);
register int p=read();for(register int i=;i<=n;i++)add(S,i,Inf,p),add(i,S,,-p);
register int x=read(),y=read();for(register int i=;i+x<=n;i++)add(i+n,i+x,Inf,y),add(i+x,i+n,,-y);
x=read(),y=read();for(register int i=;i+x<=n;i++)add(i+n,i+x,Inf,y),add(i+x,i+n,,-y);
for(register int i=;i<n;i++)add(i,i+,Inf,),add(i+,i,,);
}
inline bool spfa(){
memset(dis,0x3f,sizeof(dis));
dis[S]=,in[S]=,q.push(S);
while(!q.empty()){
register int x=q.front();q.pop(),in[x]=;
for(register int i=head[x];i;i=c[i].next)
if(c[i].f&&dis[c[i].to]>dis[x]+c[i].c){
dis[c[i].to]=dis[x]+c[i].c;pre[c[i].to]=i;
if(!in[c[i].to])q.push(c[i].to),in[c[i].to]=;
}
}
return dis[T]==Inf?:;
}
inline int back(){
register int f=Inf;
for(register int i=pre[T];i;i=pre[c[i].from])f=Min(c[i].f,f);
for(register int i=pre[T];i;i=pre[c[i].from])c[i].f-=f,c[i^].f+=f;
return f*dis[T];
}
inline void Work(){
register int ans=;
while(spfa())ans+=back();
printf("%d",ans);
}
int main(){
freopen("napkin.in", "r", stdin);
freopen("napkin.out", "w", stdout);
Init();
Work();
return ;
}

【COGS 461】[网络流24题] 餐巾 最小费用最大流的更多相关文章

  1. Cogs 461. [网络流24题] 餐巾(费用流)

    [网络流24题] 餐巾 ★★★ 输入文件:napkin.in 输出文件:napkin.out 简单对比 时间限制:5 s 内存限制:128 MB [问题描述] 一个餐厅在相继的N天里,第i天需要Ri块 ...

  2. Luogu 2764 最小路径覆盖问题 / Libre 6002 「网络流 24 题」最小路径覆盖 (网络流,最大流)

    Luogu 2764 最小路径覆盖问题 / Libre 6002 「网络流 24 题」最小路径覆盖 (网络流,最大流) Description 给定有向图G=(V,E).设P是G的一个简单路(顶点不相 ...

  3. LOJ6002 - 「网络流 24 题」最小路径覆盖

    原题链接 Description 求一个DAG的最小路径覆盖,并输出一种方案. Solution 模板题啦~ Code //「网络流 24 题」最小路径覆盖 #include <cstdio&g ...

  4. LibreOJ #6002. 「网络流 24 题」最小路径覆盖

    #6002. 「网络流 24 题」最小路径覆盖 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测 ...

  5. [LOJ#6002]「网络流 24 题」最小路径覆盖

    [LOJ#6002]「网络流 24 题」最小路径覆盖 试题描述 给定有向图 G=(V,E).设 P 是 G 的一个简单路(顶点不相交)的集合.如果 V 中每个顶点恰好在 P 的一条路上,则称 P 是  ...

  6. [网络流24题]餐巾(cogs 461)

    [问题描述] 一个餐厅在相继的N天里,第i天需要Ri块餐巾(i=l,2,-,N).餐厅可以从三种途径获得餐巾. (1)购买新的餐巾,每块需p分: (2)把用过的餐巾送到快洗部,洗一块需m天,费用需f分 ...

  7. CGOS461 [网络流24题] 餐巾(最小费用最大流)

    题目这么说的: 一个餐厅在相继的N天里,第i天需要Ri块餐巾(i=l,2,…,N).餐厅可以从三种途径获得餐巾. 购买新的餐巾,每块需p分: 把用过的餐巾送到快洗部,洗一块需m天,费用需f分(f< ...

  8. Cogs 739. [网络流24题] 运输问题(费用流)

    [网络流24题] 运输问题 ★★ 输入文件:tran.in 输出文件:tran.out 简单对比 时间限制:1 s 内存限制:128 MB «问题描述: «编程任务: 对于给定的m 个仓库和n 个零售 ...

  9. Cogs 728. [网络流24题] 最小路径覆盖问题

    [网络流24题] 最小路径覆盖问题 ★★☆ 输入文件:path3.in 输出文件:path3.out 评测插件 时间限制:1 s 内存限制:128 MB 算法实现题8-3 最小路径覆盖问题(习题8-1 ...

随机推荐

  1. POJ1236_A - Network of Schools _强连通分量::Tarjan算法

    Time Limit: 1000MS   Memory Limit: 10000K Description A number of schools are connected to a compute ...

  2. struts2官方 中文教程 系列十一:使用XML进行表单验证

    在本教程中,我们将讨论如何使用Struts 2的XML验证方法来验证表单字段中用户的输入.在前面的教程中,我们讨论了在Action类中使用validate方法验证用户的输入.使用单独的XML验证文件让 ...

  3. shell -- shift用法

    shift是Unix中非常有用的命令.可以使命令参数左移,从而使脚本程序中命令参数位置不变的情况下依次遍历所有参数.如shift 3表示原来的$4现在变成$1,原来的$5现在变成$2等等,原来的$1. ...

  4. Python未彻底测试的项目

    第一 socket 第二 twisted 第三 tornado 第四 微信网页版本登录 第五:进程,线程,协程间关系 第六:TCP三次握手 第七:堡垒机 第八:重写django admin

  5. 如何搭建SBT编译Scala开发的Android工程

    作者:戚明峰 最近接触了shadowsocks的Android客户端项目源码(https://github.com/shadowsocks/shadowsocks-android),刚好这个项目是使用 ...

  6. PostgreSQL 数据库升级

    PostgreSQL软件版本升级后,需要使用pg_upgrade迁移旧版本的数据库,具体的操作参数可以参考官方文档,在此记录一下操作过程中出现的细节问题: 新版本软件在initdb的时候要保证loca ...

  7. Scala学习笔记(四):从文件里读取文本行

    第一个版本: import scala.io.Source if(args.length>0){ for(line<-Source.fromFile(args(0)).getLines) ...

  8. JS 客户端检测

    能力检测 能力检测的目标不是识别特定的浏览器,而是识别浏览器的能力. 能力检测需要注意两点: 先检测达成目的的最常用的特性.因为先检测最常用的特性可以保证代码最优化,因为在多数情况下都可以避免测试多个 ...

  9. vuex模块相互调用

    https://segmentfault.com/a/1190000009434398

  10. Prolog奇怪奇妙的思考方式

    今天在<七周七语言>中接触到了prolog,发现它的编程模式和思考方式的确比较奇怪,但同时也非常奇妙,值得学习一下. 1. prolog语言介绍     和SQL一样,Prolog基于数据 ...