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

相关文章

SpringBoot首笔交易慢问题排查与优化方案

《SpringBoot首笔交易慢问题排查与优化方案》在我们的微服务项目中,遇到这样的问题:应用启动后,第一笔交易响应耗时高达4、5秒,而后续请求均能在毫秒级完成,这不仅触发监控告警,也极大影响了用户体... 目录问题背景排查步骤1. 日志分析2. 性能工具定位优化方案:提前预热各种资源1. Flowable

Linux系统配置NAT网络模式的详细步骤(附图文)

《Linux系统配置NAT网络模式的详细步骤(附图文)》本文详细指导如何在VMware环境下配置NAT网络模式,包括设置主机和虚拟机的IP地址、网关,以及针对Linux和Windows系统的具体步骤,... 目录一、配置NAT网络模式二、设置虚拟机交换机网关2.1 打开虚拟机2.2 管理员授权2.3 设置子

揭秘Python Socket网络编程的7种硬核用法

《揭秘PythonSocket网络编程的7种硬核用法》Socket不仅能做聊天室,还能干一大堆硬核操作,这篇文章就带大家看看Python网络编程的7种超实用玩法,感兴趣的小伙伴可以跟随小编一起... 目录1.端口扫描器:探测开放端口2.简易 HTTP 服务器:10 秒搭个网页3.局域网游戏:多人联机对战4.

springboot循环依赖问题案例代码及解决办法

《springboot循环依赖问题案例代码及解决办法》在SpringBoot中,如果两个或多个Bean之间存在循环依赖(即BeanA依赖BeanB,而BeanB又依赖BeanA),会导致Spring的... 目录1. 什么是循环依赖?2. 循环依赖的场景案例3. 解决循环依赖的常见方法方法 1:使用 @La

SpringBoot启动报错的11个高频问题排查与解决终极指南

《SpringBoot启动报错的11个高频问题排查与解决终极指南》这篇文章主要为大家详细介绍了SpringBoot启动报错的11个高频问题的排查与解决,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一... 目录1. 依赖冲突:NoSuchMethodError 的终极解法2. Bean注入失败:No qu

MySQL新增字段后Java实体未更新的潜在问题与解决方案

《MySQL新增字段后Java实体未更新的潜在问题与解决方案》在Java+MySQL的开发中,我们通常使用ORM框架来映射数据库表与Java对象,但有时候,数据库表结构变更(如新增字段)后,开发人员可... 目录引言1. 问题背景:数据库与 Java 实体不同步1.1 常见场景1.2 示例代码2. 不同操作

SpringBoot使用OkHttp完成高效网络请求详解

《SpringBoot使用OkHttp完成高效网络请求详解》OkHttp是一个高效的HTTP客户端,支持同步和异步请求,且具备自动处理cookie、缓存和连接池等高级功能,下面我们来看看SpringB... 目录一、OkHttp 简介二、在 Spring Boot 中集成 OkHttp三、封装 OkHttp

如何解决mysql出现Incorrect string value for column ‘表项‘ at row 1错误问题

《如何解决mysql出现Incorrectstringvalueforcolumn‘表项‘atrow1错误问题》:本文主要介绍如何解决mysql出现Incorrectstringv... 目录mysql出现Incorrect string value for column ‘表项‘ at row 1错误报错

如何解决Spring MVC中响应乱码问题

《如何解决SpringMVC中响应乱码问题》:本文主要介绍如何解决SpringMVC中响应乱码问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Spring MVC最新响应中乱码解决方式以前的解决办法这是比较通用的一种方法总结Spring MVC最新响应中乱码解

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用