[cogs461] [网络流24题#10] 餐巾 [网络流,最小费用最大流]
建图:从源点向第一层连边,第一层表示当天用掉多少餐巾,第二层表示当天需要多少餐巾,所以注意购买餐巾的边容量为无穷大,要从源点开始连向第二层的点,每天可能有剩余,在第一层内表示为流入第二天的节点。具体见代码,第一次写费用流,不知道模板对不对。。。
- #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] 餐巾 [网络流,最小费用最大流]的更多相关文章
- LibreOJ #6008. 「网络流 24 题」餐巾计划 最小费用最大流 建图
#6008. 「网络流 24 题」餐巾计划 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
- LibreOJ #6013. 「网络流 24 题」负载平衡 最小费用最大流 供应平衡问题
#6013. 「网络流 24 题」负载平衡 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
- COGS738 [网络流24题] 数字梯形(最小费用最大流)
题目这么说: 给定一个由n 行数字组成的数字梯形如下图所示.梯形的第一行有m 个数字.从梯形的顶部的m 个数字开始,在每个数字处可以沿左下或右下方向移动,形成一条从梯形的顶至底的路径.规则1:从梯形的 ...
- Bashu2445 -- 【网络流24题-10】餐巾问题
2445 -- [网络流24题-10]餐巾问题 Description 一个餐厅在相继的n天里,每天需要用的餐巾数不尽相同.假设第i天需要ri块餐巾(i=1,2,…,n).餐厅可以购买新的餐巾,每块餐 ...
- Libre 6008 「网络流 24 题」餐巾计划 (网络流,最小费用最大流)
Libre 6008 「网络流 24 题」餐巾计划 (网络流,最小费用最大流) Description 一个餐厅在相继的N天里,第i天需要Ri块餐巾(i=l,2,-,N).餐厅可以从三种途径获得餐巾. ...
- LOJ #6008. 「网络流 24 题」餐巾计划
#6008. 「网络流 24 题」餐巾计划 题目描述 一个餐厅在相继的 n nn 天里,每天需用的餐巾数不尽相同.假设第 i ii 天需要 ri r_iri 块餐巾.餐厅可以购买新的餐巾,每块餐 ...
- [luogu_P1251][LOJ#6008]「网络流 24 题」餐巾计划
[luogu_P1251][LOJ#6008]「网络流 24 题」餐巾计划 试题描述 一个餐厅在相继的 \(N\) 天里,第 \(i\) 天需要 \(R_i\) 块餐巾 \((i=l,2,-,N)\) ...
- CGOS461 [网络流24题] 餐巾(最小费用最大流)
题目这么说的: 一个餐厅在相继的N天里,第i天需要Ri块餐巾(i=l,2,…,N).餐厅可以从三种途径获得餐巾. 购买新的餐巾,每块需p分: 把用过的餐巾送到快洗部,洗一块需m天,费用需f分(f< ...
- BZOJ_1221_ [HNOI2001]_软件开发(最小费用流,网络流24题#10)
描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1221 n天,每天需要r个毛巾,用完以后可以洗,要么花fa洗a天,要么花fb洗b天,毛巾不够了可 ...
随机推荐
- istio-禁用/允许sidecar设置
一.在namespace设置自动注入: 给 default 命名空间设置标签:istio-injection=enabled: $ kubectl label namespace default is ...
- Django-CKeditor使用笔记
1. 安装django-ckeditor $ pip install django-ckeditor 2. 在setting中,添加ckeditor , ckeditor_uploader 到INST ...
- 【WIP】Bootstrap nav
创建: 2017/09/28 更新: 2017/10/14 标题加上[WIP]
- U3D版本控制设置 Force Text优劣
git的忽略列表 .gitignore Library/ Temp/ .vs/ *.csproj *.sln Edit > Project Settings > Editor 下把meta ...
- 洛谷P1731生日蛋糕(dfs+剪枝)
P1731 生日蛋糕 题目背景 7月17日是Mr.W的生日,ACM-THU为此要制作一个体积为Nπ的M层 生日蛋糕,每层都是一个圆柱体. 设从下往上数第i(1<=i<=M)层蛋糕是半径为R ...
- bzoj1036 树的统计(树链剖分+线段树)
1036: [ZJOI2008]树的统计Count Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 15120 Solved: 6141[Submit ...
- Win7 + VS2015 + Python3.6编译
0. 下载安装hg. http://bitbucket.org/tortoisehg/files/downloads/tortoisehg-4.0.1-x64.msi 1. 下载Python3.6源代 ...
- [转]Oracle11g链接提示未“在本地计算机注册“OraOLEDB.Oracle”解决方法
本文转自:http://www.cnblogs.com/tomfang/archive/2013/05/25/3098454.html 当 用,Provider=OraOLEDB.Oracle方式访问 ...
- Listview模板
每次写listview都要翻以前的代码,好烦.所以记下模板,方便下次的使用. xml文件部分代码: <ListView android:id="@+id/listview" ...
- [Windows Server 2008] Serv-U安全设置
★ 欢迎来到[护卫神·V课堂],网站地址:http://v.huweishen.com ★ 护卫神·V课堂 是护卫神旗下专业提供服务器教学视频的网站,每周更新视频. ★ 本节我们将带领大家:Serv- ...