既然是最小费用最大流我们就用最大流来限制其一定能把每天跑满,那么把每个表示天的点向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. php 移动或重命名文件(图片)到另一目录下的方法有多种,这里只列出三种:

    php 移动或重命名文件(图片)到另一目录下的方法有多种,这里只列出三种:       方法一:使用copy函数   格式:copy(source,destination)   将文件从 source ...

  2. 帆软中使用switch将控件的显示值“传递”给单元格

    如下图,控件的实际值和显示值是我们自定义的. 当我们选择控件时,想要在某个单元格内显示控件的显示值.一般我们在单元格内直接 $控件名  可以获得控件值.比如当我们选择事故数时,我们自然不能在单元格内直 ...

  3. PAT-B java实现

    注意:java提交PAT时,不需要加package : 类名必须是Main. 1001 害死人不偿命的(3n+1)猜想 (15) 输入格式:每个测试输入包含1个测试用例,即给出自然数n的值. 输出格式 ...

  4. java泛型<? extends E> 有上限通配符与<? Super E>有上限通配符

    通配符?,?表示占位,表明将来使用的时候在指明类型 <?>无限定的通配符, 是让泛型能够接受未知类型的数据 <? extends E> 有上限通配符,能够接受指定类及其子类类型 ...

  5. poj 2393 奶牛场生产成本问题 贪心算法

    题意:有一个奶牛场,第i周的生产成本为c,需要数量为 y,每周的存储成本为s.问怎么安排使得成本最低? 思路: 成本最低是吧?求出每周的最低成本*该周需要的数量就是成本最低 每周的成本有两个:自己本周 ...

  6. 46-Identity MVC:登录逻辑实现

    1- Login.cshtml <h3>Login</h3> @model MvcCookieAuthSample.ViewModel.LoginViewModel <d ...

  7. android ActionBar 去掉menu分隔线

    自定义Theme继承原来Theme修改其中的分隔线: <item name="actionBarDivider">@null</item>  低版本设置 & ...

  8. 【python3.X】python练习笔记[1]

    ##三位数水仙花 ##方法一,小于指定数字的水仙花数 x=eval(input()) a,b,c = 0,0,0 for i in range (100,x,1): a=i%10 b=i//100 c ...

  9. 纯js实现复制内容到剪切板

    下面的方法可以完美实现: 复制指定input 或者 textarea中的内容: 指定非输入框元素中的内容 代码如下: function copyToClipboard(elem) { // creat ...

  10. Cyclone IV器件的逻辑单元和逻辑阵列快

    1. 逻辑单元 (LE) 在 Cyclone IV 器件结构中是最小的逻辑单位.LE 紧密且有效的提供了高级功能的逻辑使用.每个 LE 有以下特性:一个四口输入的查找表 (LUT),以实现四种变量的任 ...