建图:从源点向第一层连边,第一层表示当天用掉多少餐巾,第二层表示当天需要多少餐巾,所以注意购买餐巾的边容量为无穷大,要从源点开始连向第二层的点,每天可能有剩余,在第一层内表示为流入第二天的节点。具体见代码,第一次写费用流,不知道模板对不对。。。

#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <ctime>
#include <cstdlib>
#include <queue> using namespace std; template<const int _n,const int _m>
struct Edge
{
struct Edge_base { int to,next,w,c; }e[_m];
int cnt,p[_n];
Edge() { clear(); }
int start(const int x) { return p[x]; }
void insert(const int x,const int y,const int z,const int zz)
{ e[++cnt].to=y; e[cnt].next=p[x]; e[cnt].w=z; e[cnt].c=zz; p[x]=cnt; return ; }
void clear() { cnt=,memset(p,,sizeof(p)); }
Edge_base& operator[](const int x) { return e[x]; }
}; int n,Dis[],SSS,TTT,cur[],a[];
int Cost,Flow;
bool visited[];
Edge<,> e; bool Spfa(const int S)
{
int i,t,temp;
queue<int> Q;
memset(Dis,0x3f,sizeof(Dis));
Dis[S]=;
visited[S]=true;
Q.push(S);
while(!Q.empty())
{
t=Q.front(),Q.pop();visited[t]=false;
for(i=e.start(t);i;i=e[i].next)
{
temp=e[i].to;
if(e[i].w && Dis[t]+e[i].c<Dis[temp])
{
Dis[temp]=Dis[t]+e[i].c;
if(!visited[temp])
{
visited[temp]=true;
Q.push(temp);
}
}
}
}
return Dis[TTT]!=0x3f3f3f3f;
} int Dfs(const int S,const int bk)
{
if(S==TTT)return bk;
visited[S]=true;
int rest=bk;
for(int &i=cur[S];i;i=e[i].next)
{
if(!visited[e[i].to] && Dis[S]+e[i].c==Dis[e[i].to] && e[i].w)
{
int flow=Dfs(e[i].to,min(rest,e[i].w));
Cost+=flow*e[i].c;
e[i].w-=flow;
e[i^].w+=flow;
if((rest-=flow)<=)break;
}
}
if(bk==rest)Dis[S]=0x3f3f3f3f;
visited[S]=false;
return bk-rest;
} pair<int,int> Dinic()
{
while(Spfa(SSS))
{
memcpy(cur,e.p,sizeof(cur));
Flow+=Dfs(SSS,0x3f3f3f3f);
}
return make_pair(Flow,Cost);
} int main()
{
freopen("napkin.in","r",stdin);
freopen("napkin.out","w",stdout);
int i,newn,ts,cs,tf,cf; scanf("%d",&n);
for(i=;i<=n;++i)scanf("%d",&a[i]);
scanf("%d%d%d%d%d",&newn,&ts,&cs,&tf,&cf); SSS=n+n+;TTT=SSS+;
for(i=;i<=n;++i)
{
e.insert(SSS,i,a[i],),e.insert(i,SSS,,);
e.insert(i+n,TTT,a[i],),e.insert(TTT,i+n,,);
e.insert(SSS,i+n,0x3f3f3f3f,newn),e.insert(i+n,SSS,,-newn);
if(i!=n)e.insert(i,i+,0x3f3f3f3f,),e.insert(i+,i,,);
if(i+tf<=n)e.insert(i,i+tf+n,0x3f3f3f3f,cf),e.insert(i+tf+n,i,,-cf);
if(i+ts<=n)e.insert(i,i+ts+n,0x3f3f3f3f,cs),e.insert(i+ts+n,i,,-cs);
} printf("%d\n",Dinic().second); return ;
}

[cogs461] [网络流24题#10] 餐巾 [网络流,最小费用最大流]的更多相关文章

  1. LibreOJ #6008. 「网络流 24 题」餐巾计划 最小费用最大流 建图

    #6008. 「网络流 24 题」餐巾计划 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  2. LibreOJ #6013. 「网络流 24 题」负载平衡 最小费用最大流 供应平衡问题

    #6013. 「网络流 24 题」负载平衡 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  3. COGS738 [网络流24题] 数字梯形(最小费用最大流)

    题目这么说: 给定一个由n 行数字组成的数字梯形如下图所示.梯形的第一行有m 个数字.从梯形的顶部的m 个数字开始,在每个数字处可以沿左下或右下方向移动,形成一条从梯形的顶至底的路径.规则1:从梯形的 ...

  4. Bashu2445 -- 【网络流24题-10】餐巾问题

    2445 -- [网络流24题-10]餐巾问题 Description 一个餐厅在相继的n天里,每天需要用的餐巾数不尽相同.假设第i天需要ri块餐巾(i=1,2,…,n).餐厅可以购买新的餐巾,每块餐 ...

  5. Libre 6008 「网络流 24 题」餐巾计划 (网络流,最小费用最大流)

    Libre 6008 「网络流 24 题」餐巾计划 (网络流,最小费用最大流) Description 一个餐厅在相继的N天里,第i天需要Ri块餐巾(i=l,2,-,N).餐厅可以从三种途径获得餐巾. ...

  6. LOJ #6008. 「网络流 24 题」餐巾计划

    #6008. 「网络流 24 题」餐巾计划 题目描述 一个餐厅在相继的 n nn 天里,每天需用的餐巾数不尽相同.假设第 i ii 天需要 ri r_ir​i​​ 块餐巾.餐厅可以购买新的餐巾,每块餐 ...

  7. [luogu_P1251][LOJ#6008]「网络流 24 题」餐巾计划

    [luogu_P1251][LOJ#6008]「网络流 24 题」餐巾计划 试题描述 一个餐厅在相继的 \(N\) 天里,第 \(i\) 天需要 \(R_i\) 块餐巾 \((i=l,2,-,N)\) ...

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

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

  9. BZOJ_1221_ [HNOI2001]_软件开发(最小费用流,网络流24题#10)

    描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1221 n天,每天需要r个毛巾,用完以后可以洗,要么花fa洗a天,要么花fb洗b天,毛巾不够了可 ...

随机推荐

  1. JSP-Runoob:Cookie 处理

    ylbtech-JSP-Runoob:Cookie 处理 1.返回顶部 1. JSP Cookie 处理 Cookie是存储在客户机的文本文件,它们保存了大量轨迹信息.在servlet技术基础上,JS ...

  2. E20170916-hm

    sassy   adj. 无礼的; 漂亮的; <非正,美> <贬>粗鲁的; <褒>时髦的; digest vt. 消化; 整理; compressor  n. 压气 ...

  3. hebernate基础学习2---属性

    ---------------------------------------------------------------------------------------------------- ...

  4. Parlay Wagering

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2833 题意:讲述了一种投小钱赢大钱的赌博方式, ...

  5. Is the Information Reliable?(差分约束系统)

    http://poj.org/problem?id=2983 题意:给出M条信息,判断这些信息的正确性.(1)V A B :表示A,B之间的距离>=1; (2)P A B X :表示A B之间的 ...

  6. P3399 丝绸之路(线性二维dp)

    P3399 丝绸之路 题目背景 张骞于公元前138年曾历尽艰险出使过西域.加强了汉朝与西域各国的友好往来.从那以后,一队队骆驼商队在这漫长的商贸大道上行进,他们越过崇山峻岭,将中国的先进技术带向中亚. ...

  7. [Apple开发者帐户帮助]七、注册设备(3)禁用或启用设备

    您可以禁用和启用设备,但不能从开发者帐户中删除它.您可以禁用不再用于开发或测试的设备.但是,这样做会使包含设备的配置文件无效,并且不会增加当年设备的总数. 所需角色:帐户持有人或管理员. 在“ 证书” ...

  8. 慕课网3-10编程练习:简单的flex布局

    小伙伴们,我们学习了伸缩容器的一些属性,接下来使用我们所学的伸缩容器属性完成下面的效果图. 完成效果: 任务 1.先将容器设置为伸缩容器 2.在垂直方向上对齐,行与行之间的空白距离一样 3.在水平方向 ...

  9. Aspose Cells dll 实现数据简单下载

    Workbook workbook = new Workbook(); //工作簿                     Worksheet sheet = workbook.Worksheets[ ...

  10. 启用禁用USB接口

    一个小工具,功能有启用禁用外网.USB接口,可由服务端socket长链接进行操控客户端从而达到实现前边的这些功能,这里贴上核心代码,先给上启用禁用USB接口吧,这个方法可随时启用禁用,之前用过一个改u ...