【网络流24题】餐巾计划问题(最小费用最大流)

【网络流24题】餐巾计划问题(最小费用最大流)

题面

COGS
洛谷上的数据范围更大,而且要开longlong

题解

餐巾的来源分为两种:
①新买的
②旧的拿去洗
所以,两种情况分别建图

先考虑第一种
因为新买餐巾没有任何限制,并且随时可以买
所以直接从源点向每一天连边,容量为INF,费用为餐巾的价格
因为流要流出去,所以每个点向汇点连边,容量为每天的用量,费用为0

第二种,旧的拿去洗
首先考虑一下怎么算有多少旧的餐巾
每天用旧的餐巾的数量值一定的,不可能变多
因此从源点向这些点连边,容量为每天的用量,费用为0
因为旧餐巾可以累积,所以从上一天向下一天连边,容量为INF,费用为0
接下来是快洗和慢洗,这两种情况是一样的
直接从表示旧餐巾数量的这些点向洗完的那一天连边,
容量为INF,费用为洗餐巾的费用

这样子连边保证最大流为总的餐巾需求数
也就是说,每天一定会流满(因为中间的边容量是INF,如果要割开只能割源点或者汇点连出去的边,而这些边的容量和就是餐巾的总需求数)

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#include<queue>
using namespace std;
#define INF 1000000000
#define MAXL 500000
#define MAX 2000
inline int read()
{int x=0,t=1;char ch=getchar();while((ch<'0'||ch>'9')&&ch!='-')ch=getchar();if(ch=='-')t=-1,ch=getchar();while(ch<='9'&&ch>='0')x=x*10+ch-48,ch=getchar();return x*t;
}
int n,a[MAX];
struct Line
{int v,next,w,fy;
}e[MAXL];
int h[MAX],cnt=2;
inline void Add(int u,int v,int w,int fy)
{e[cnt]=(Line){v,h[u],w,fy};h[u]=cnt++;e[cnt]=(Line){u,h[v],0,-fy};h[v]=cnt++;
}
int dis[MAX],pe[MAX],pv[MAX];
int S,T,Cost,Flow;
bool vis[MAX];
bool SPFA()
{for(int i=S;i<=T;++i)dis[i]=INF;dis[S]=0;queue<int> Q;Q.push(S);while(!Q.empty()){int u=Q.front();Q.pop();for(int i=h[u];i;i=e[i].next){int v=e[i].v;if(e[i].w&&dis[v]>dis[u]+e[i].fy){dis[v]=dis[u]+e[i].fy;pe[v]=i;pv[v]=u;if(!vis[v])vis[v]=true,Q.push(v);}}vis[u]=false;}if(dis[T]==INF)return false;int fl=INF;for(int i=T;i!=S;i=pv[i])fl=min(fl,e[pe[i]].w);for(int i=T;i!=S;i=pv[i])e[pe[i]].w-=fl,e[pe[i]^1].w+=fl;Flow+=fl;Cost+=fl*dis[T];return true;
}
int mm,ff,p;
int main()
{freopen("napkin.in","r",stdin);freopen("napkin.out","w",stdout);n=read();S=0,T=n+n+1;for(int i=1;i<=n;++i)a[i]=read(),Add(S,i,a[i],0),Add(i+n,T,a[i],0);p=read();for(int i=1;i<=n;++i)Add(S,i+n,INF,p);mm=read();ff=read();for(int i=1;i+mm<=n;++i)Add(i,i+n+mm,INF,ff);mm=read();ff=read();for(int i=1;i+mm<=n;++i)Add(i,i+n+mm,INF,ff);for(int i=1;i<n;++i)Add(i,i+1,INF,0);while(SPFA());printf("%d\n",Cost);return 0;
}

转载于:https://www.cnblogs.com/cjyyb/p/8175687.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414993.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

js正则表达式匹配span标签

1、js正则表达式匹配span标签 const spans htmlStr.match(/<span (.*?)>(.*?)<\/span>/g)2、js正则表达式–获取标签内的文本 function fn(str) {return str.match(/<span[^>]*>([\s\S]*?)<\/span>/)[1] }

工作209:整理订单的重置逻辑

1点击新增 2找到子组件下面的混入 3找到混入 4这一块或许就是重置逻辑

phaser设置图片资源大小

核心代码如下&#xff1a; // 加载图片资源 this.load.image(pic6, /images/phaser/img/pic6.png) const pic this.add.image(1505, 630, pic6) pic.displayWidth 100 pic.displayHeight 100

位域操作

看runtime源码时&#xff0c;看到如下声明变量的&#xff0c;变量后分号前加冒号和数字": 数字"即为位域操作。 uintptr_t indexed : 1; 1个字节包含8位&#xff0c;有些变量保存的数据不需要占用这么长的空间&#xff08;比如bool类型&#xff0c;只有两个…

工作211:新的封装组件 秒呀

<!-- 可以动态新增的 tag 列表 --> <template><div><el-tagv-for"(tag, index) in dynamicTags":key"index":closable"true":disable-transitions"false"close"handleClose(tag)">{{ tag }}</el…

HTTP协议简介,数据安全 如何保证http传输安全性,http与https区别

目前大多数网站和app的接口都是采用http协议&#xff0c;但是http协议很容易就通过抓包工具监听到内容&#xff0c;甚至可以篡改内容&#xff0c;为了保证数据不被别人看到和修改&#xff0c;可以通过以下几个方面避免。 重要的数据&#xff0c;要加密&#xff0c;比如用户名密…

mongoose只更新数组中某一项的字段

只是需要一个特殊符号$代表匹配某一项 数据库设计如下&#xff1a; 核心代码如下&#xff1a; // 回答试题public async userPaperAnswer(request: IRequest, _h: IResponse) {const { user_paper_id, question_id, option_user } request.payload;const updOne await Use…

Koa2+Mysql搭建简易博客

http://blog.csdn.net/wclimb/article/details/77890793 转载于:https://www.cnblogs.com/SharkChilli/p/8177753.html

工作213:不能改变父组件值

父组件通过props传值给子组件&#xff0c;如何避免子组件改变props的属性值报错问题 报错Avoid mutating a prop directly since the value will be overwritten whenever the parent component re-renders. Instead, use a data or computed property based on the prop’s v…

uniapp移动H5在花生壳Invalid Host header

解决方案&#xff0c;在manifest.json中配置 "h5" : {"title" : "","domain" : "","devServer" : {"disableHostCheck" : true} }

Android 下拉式抽屉折叠动画

自定义listview工具类1、 public class ViewMeasureUtils {/*** 根据父 View 规则和子 View 的 LayoutParams&#xff0c;计算子类的宽度(width)测量规则** param view*/public static int getChildWidthMeasureSpec(View view, int parentWidthMeasureSpec) {// 获取父 View …

18.抽象模板方法———获取程序运行的时间

需求&#xff1a;获取一段程序运行的时间。原理&#xff1a;   获取程序开始和结束的额时间并相见即可  获取时间&#xff1a;System.currentTimeMillis(); 当代码完成优化后&#xff0c;就可以解决这类问题。这种方式&#xff0c;叫模板方法设计模式。 什么是模板方法呢&a…

js随机从数组中取出几个元素

这篇文章为转载&#xff0c;我的需求是从题库中&#xff0c;随机抽几道题&#xff0c;作为新试卷。代码如下&#xff1a; var items [1,2,4,5,6,7,8,9,10];1.从数组items中随机取出一个元素 var item items[Math.floor(Math.random()*items.length)];2.从前面的一篇随机数组…

工作214:结构 vue操作一个很有意思的报错 [Vue warn]: You may have an infinite update loop in a component

结构 vue操作一个很有意思的报错 [Vue warn]: You may have an infinite update loop in a component render function. 代码&#xff1a; <template><span class"show-filters" &#xff1a;class"show !show">{{ show ? 隐藏过滤器 ↑ …

Android 实现选中与非选中样式效果

drawable文件 <?xml version"1.0" encoding"utf-8"?> <selector xmlns:android"http://schemas.android.com/apk/res/android"><item android:drawable"drawable/log_button_bgok" android:state_focused"true&…

beta冲刺总结

团队成员及分工 姓名学号分工陈家权031502107前端&#xff08;消息模块&#xff09;赖晓连031502118前端&#xff08;问答模块&#xff09;雷晶031502119服务器林巧娜031502125前端&#xff08;首页模块&#xff09;一、项目预期计划及现实进展 项目预期计划现实进展解决页面异…

cesium polygon 悬浮在半空中

效果如下&#xff1a; 代码&#xff1a; let arr [[120.87140893447473, 31.877030830389447, 128.64],[120.87140872335587, 31.876963534304792, 128.64],[120.87202301763111, 31.87696299560446, 128.63],[120.87202432001283, 31.877030271988385, 128.63]]arr [].con…

工作215:点击按钮报错

获取值有点问题 点击同一按钮获取值有问题

phalcon无限重定向

问题 换了个新电脑&#xff0c;后来重新配置phalcon环境。由于用得是windows&#xff0c;而且还用得是2.0.5得版本&#xff0c;官网已经没提供这个版本下载了。而旧电脑已经被格式化了&#xff0c;?。 寻找旧版本 通过一番搜索&#xff0c;发现了一个issue&#xff0c;提到pha…