bzoj1221[HNOI2001] 软件开发 - 网络流24题のNo.10餐巾问题

2024-05-11 23:58

本文主要是介绍bzoj1221[HNOI2001] 软件开发 - 网络流24题のNo.10餐巾问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:bzoj1221

题目大意:
一项n天的软件开发计划,第i天需要ni个软件开发人员,要为每个开发人员每天提供一块消毒毛巾,这种消毒毛巾使用一天后必须再做消毒处理后才能使用。消毒方式有两种,A种方式的消毒需要a天时间,B种方式的消毒需要b天(b>a),A种消毒方式的费用为每块毛巾fA, B种消毒方式的费用为每块毛巾fB。也可以买一块新毛巾的费用为f(新毛巾是已消毒的,当天可以使用)且f>fA>fB。求最低的总费用。

题解:
最小费用最大流
构图好厉害
把每天拆成两个点 xi yi xi 表示第 i 天用过的餐巾,yi表示第 i 天收到的干净的餐巾。
构图如下:
1、xi-> xi+1 ,流量为 ,费用为 0 ,用过的餐巾可以留到下一天嘛
2、xi-> yi+a+1 ,流量为 ,费用为fA,第一种消毒方式。第 i 天的用完之后餐巾可以经过消毒给第i+a+1天的用。
3、同理第二种消毒方式。xi-> yi+b+1 ,流量为 ,费用为fB。
4、 S ->yi,流量为 ,费用为f,这个表示买毛巾,不是别的天用过的。
5、 S ->xi,流量为 ni ,费用为0; yi -> T ,流量为ni,费用为0;这两条边就是需求的限制。要满足需求的话, yi 就一定有 ni 流出(入), xi 就一定有 ni 流入(出),就是说这天一定有 ni 张餐巾用过。

然后就是跑最小费用最大流了。

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 2500const int inf=0x7fffffff;
struct node
{int y,c,f,next,ot;//c-费用 f-流量
}a[maxn*6];int len,first[maxn];
int n,S,T,pre[maxn],l[maxn],d[maxn];
int flow[maxn];bool vis[maxn];
int mymin(int x,int y){return (x<y)?x:y;}
void ins(int x,int y,int f,int c)
{len++;int now1=len;a[len].y=y;a[len].c=c;a[len].f=f;a[len].next=first[x];first[x]=len;len++;int now2=len;a[len].y=x;a[len].c=-c;a[len].f=0;a[len].next=first[y];first[y]=len;a[now1].ot=now2;a[now2].ot=now1;
}
int head,tail,list[maxn*10];
int bfs(int st,int ed)
{head=1;tail=1;list[head]=st;memset(d,-1,sizeof(d));memset(pre,-1,sizeof(pre));memset(vis,false,sizeof(vis));pre[st]=0;d[st]=0;flow[st]=inf;vis[st]=true;while (head<=tail){int x=list[head++];for (int k=first[x];k!=-1;k=a[k].next){int y=a[k].y;if (!a[k].f) continue;if (d[y]==-1 || d[y]>d[x]+a[k].c){d[y]=d[x]+a[k].c;flow[y]=mymin(flow[x],a[k].f);pre[y]=x;l[y]=k;if (!vis[y]) {vis[y]=true;list[++tail]=y;}}}vis[x]=false;}if (pre[ed]==-1) return 0;return flow[ed];
}
int MCMF()
{int delta,ans=0;while (delta=bfs(S,T)){ans+=delta*d[T];int x=T;while (x!=S){a[l[x]].f-=delta;a[a[l[x]].ot].f+=delta;x=pre[x];}}return ans;
}
int main()
{//freopen("a.in","r",stdin);//freopen("a.out","w",stdout);int ta,tb,ff,fa,fb,i,r;scanf("%d%d%d%d%d%d",&n,&ta,&tb,&ff,&fa,&fb);S=2*n+1;T=S+1;len=0;memset(first,-1,sizeof(first));for (i=1;i<=n;i++){scanf("%d",&r);ins(S,2*i-1,r,0);ins(2*i,T,r,0);if (i!=n) ins(2*i-1,2*(i+1)-1,inf,0);ins(S,2*i,inf,ff);if (i+ta+1<=n) ins(2*i-1,2*(i+ta+1),inf,fa);if (i+tb+1<=n) ins(2*i-1,2*(i+tb+1),inf,fb);}printf("%d\n",MCMF());return 0;
}

这篇关于bzoj1221[HNOI2001] 软件开发 - 网络流24题のNo.10餐巾问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/981026

相关文章

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操

Redis出现中文乱码的问题及解决

《Redis出现中文乱码的问题及解决》:本文主要介绍Redis出现中文乱码的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1. 问题的产生2China编程. 问题的解决redihttp://www.chinasem.cns数据进制问题的解决中文乱码问题解决总结

全面解析MySQL索引长度限制问题与解决方案

《全面解析MySQL索引长度限制问题与解决方案》MySQL对索引长度设限是为了保持高效的数据检索性能,这个限制不是MySQL的缺陷,而是数据库设计中的权衡结果,下面我们就来看看如何解决这一问题吧... 目录引言:为什么会有索引键长度问题?一、问题根源深度解析mysql索引长度限制原理实际场景示例二、五大解决

Springboot如何正确使用AOP问题

《Springboot如何正确使用AOP问题》:本文主要介绍Springboot如何正确使用AOP问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录​一、AOP概念二、切点表达式​execution表达式案例三、AOP通知四、springboot中使用AOP导出

Python中Tensorflow无法调用GPU问题的解决方法

《Python中Tensorflow无法调用GPU问题的解决方法》文章详解如何解决TensorFlow在Windows无法识别GPU的问题,需降级至2.10版本,安装匹配CUDA11.2和cuDNN... 当用以下代码查看GPU数量时,gpuspython返回的是一个空列表,说明tensorflow没有找到

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

IDEA Maven提示:未解析的依赖项的问题及解决

《IDEAMaven提示:未解析的依赖项的问题及解决》:本文主要介绍IDEAMaven提示:未解析的依赖项的问题及解决,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录IDEA Maven提示:未解析的依编程赖项例如总结IDEA Maven提示:未解析的依赖项例如

Redis分片集群、数据读写规则问题小结

《Redis分片集群、数据读写规则问题小结》本文介绍了Redis分片集群的原理,通过数据分片和哈希槽机制解决单机内存限制与写瓶颈问题,实现分布式存储和高并发处理,但存在通信开销大、维护复杂及对事务支持... 目录一、分片集群解android决的问题二、分片集群图解 分片集群特征如何解决的上述问题?(与哨兵模