LUOGU P4016 负载平衡问题

题目描述

GG 公司有 nn 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等。如何用最少搬运量可以使 nn 个仓库的库存数量相同。搬运货物时,只能在相邻的仓库之间搬运。

输入输出格式

输入格式:
文件的第 11 行中有 11 个正整数 nn ,表示有 nn 个仓库。

第 22 行中有 nn 个正整数,表示 nn 个仓库的库存量。

输出格式:
输出最少搬运量。

输入输出样例

输入样例#1:
5
17 9 14 16 4
输出样例#1:
11
说明

1 \leq n \leq 1001≤n≤100

解题思路

第一种方法就是环形均分纸牌,和糖果传递一模一样。
第二种方法是网络流,建立超级源点S,S向比平均值大的连一条容量为a[i]-平均值,花费为0的边,建立超级源点T,比平均值小的点向T连一条容量为平均值-a[i],花费为0的边,然后每个点向它左右连一条容量为inf,花费为1的边,然后跑费用流即可。

代码

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>using namespace std;
const int MAXN = 10005;
const int inf = 0x3f3f3f3f;inline int rd(){int x=0,f=1;char ch=getchar();while(!isdigit(ch)) {f=ch=='-'?0:1;ch=getchar();}while(isdigit(ch))  {x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}return f?x:-x;
}int n,a[MAXN],sum,head[MAXN],cnt=1,S,T;
int to[MAXN<<1],nxt[MAXN<<1],val[MAXN<<1],cost[MAXN<<1];
int incf[MAXN],pre[MAXN],dis[MAXN],ans;
bool vis[MAXN];
queue<int> Q;inline void add(int bg,int ed,int w,int c){to[++cnt]=ed,nxt[cnt]=head[bg],val[cnt]=w,cost[cnt]=c,head[bg]=cnt;to[++cnt]=bg,nxt[cnt]=head[ed],val[cnt]=0,cost[cnt]=-c,head[ed]=cnt;
}bool spfa(){memset(vis,false,sizeof(vis));memset(dis,0x3f,sizeof(dis));while(Q.size()) Q.pop();dis[S]=0,vis[S]=1,Q.push(S),incf[S]=inf;while(Q.size()){int x=Q.front();Q.pop();for(register int i=head[x];i;i=nxt[i]){int u=to[i];if(val[i] && dis[x]+cost[i]<dis[u]){dis[u]=dis[x]+cost[i];pre[u]=i;incf[u]=min(incf[x],val[i]);if(!vis[u]) vis[u]=1,Q.push(u);}}vis[x]=0;}if(dis[T]==inf) return false;return true;
}void update(){int x=T;while(x!=S){int i=pre[x];val[i]-=incf[T];val[i^1]+=incf[T];x=to[i^1];}ans+=dis[T]*incf[T];
}int main(){n=rd();S=0,T=n+1;for(register int i=1;i<=n;i++) a[i]=rd(),sum+=a[i];sum/=n;for(register int i=1;i<=n;i++){a[i]-=sum;if(a[i]>0) add(S,i,a[i],0);else add(i,T,-a[i],0);}for(register int i=2;i<n;i++) add(i,i-1,inf,1),add(i,i+1,inf,1);add(1,2,inf,1),add(1,n,inf,1);add(n,n-1,inf,1),add(n,1,inf,1);while(spfa()) update();cout<<ans<<endl;return 0;
}

转载于:https://www.cnblogs.com/sdfzsyq/p/9676847.html

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

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

相关文章

【剑指offer】面试题55 - II:平衡二叉树(Java)

输入一棵二叉树的根节点&#xff0c;判断该树是不是平衡二叉树。如果某二叉树中任意节点的左右子树的深度相差不超过1&#xff0c;那么它就是一棵平衡二叉树。 示例 1: 给定二叉树 [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7 返回 true 。 示例 2: 给定二…

计算机网络——CSMA/CD最小帧长相关题目

计算机网络——CSMA/CD最小帧长问题 本篇博客主要讲解有关CSMA/CD最小帧长求解相关例题&#xff0c;关于CSMA/CD详细详解请参考博客&#xff1a;CSMA/CD协议分析笔记 例题一、假定1km长的CSMA/CD网络的数据率为1Gbit/s。设信号在网络上的传输速率为200000km/s。求能够使用此协…

AI式剥削:数据标注人员日薪低至51块钱

来源&#xff1a;AI前线编译&#xff1a;核子可乐、钰莹最新论文指出&#xff0c;AI 行业正在残酷压榨刚刚兴起的全球零工经济体系。现代人工智能依赖各种算法处理规模达数百万的示例、图像或文本素材。但在此之前&#xff0c;首先需要由工作人员在图片数据集中手动标记出对象&…

SpringCloud03 Ribbon知识点、 Feign知识点、利用RestTemplate+Ribbon调用远程服务提供的资源、利用feign调用远程服务提供的资源、熔断...

1 远程服务资源的调用 1.1 古老的套路 在微服务出现之前&#xff0c;所有的远程服务资源必须通过RestTemplate或者HttpClient进行&#xff1b;但是这两者仅仅实现了远程服务资源的调用&#xff0c;并未提供负载均衡实现&#xff0c;所以程序员必须自己实现负载均衡功能&#xf…

【剑指offer】面试题56 - I:数组中数字出现的次数 I

一个整型数组 nums 里除两个数字之外&#xff0c;其他数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n)&#xff0c;空间复杂度是O(1)。 示例 1&#xff1a; 输入&#xff1a;nums [4,1,4,6] 输出&#xff1a;[1,6] 或 [6,1] 示例 2&#xff1a;…

关于考研与工作(人生规划)的个人思考

迷茫——人生的常态 今年是大学的第四年&#xff0c;考研结束的这几天&#xff0c;也对自己能不能考上有了大概的掌握。说实话&#xff0c;当时为什么决定考研&#xff1f;一是&#xff0c;当时上一级的师哥师姐几乎很少有不考研直接找工作的&#xff0c;很难找到不考研的另外…

一个没有意义的宇宙我们很难想象

© Pixabay来源&#xff1a;利维坦利维坦按&#xff1a;按照人择理论&#xff0c;“被观测的宇宙环境&#xff0c;必须允许观测者的存在”&#xff0c;我们似乎有理由相信&#xff0c;宇宙之存在有赖于观测者&#xff0c;不过&#xff0c;这个观测者一定是我们人类吗&#…

SpringCloud(二) 服务注册与发现Eureka

1.eureka是干什么的&#xff1f; 上篇说了&#xff0c;微服务之间需要互相之间通信&#xff0c;那么通信就需要各种网络信息&#xff0c;我们可以通过使用硬编码的方式来进行通信&#xff0c;但是这种方式显然不合适&#xff0c;不可能说一个微服务的地址发生变动&#xff0c;那…

【剑指offer】面试题56 - II:数组中数字出现的次数 II(Java)

在一个数组 nums 中除一个数字只出现一次之外&#xff0c;其他数字都出现了三次。请找出那个只出现一次的数字。 示例 1&#xff1a; 输入&#xff1a;nums [3,4,3,3] 输出&#xff1a;4 示例 2&#xff1a; 输入&#xff1a;nums [9,1,7,9,7,9,7] 输出&#xff1a;1 限…

Java打印三角形(双层for循环)

Java打印三角形(双层for循环) 1.第一个三角形&#xff1a; 打印样式&#xff1a; 外层for循环控制行数&#xff0c;内层for循环控制“*”的个数 public static void demo01(){//行数&#xff1a;4行for(int i1;i<4;i){/*找规律&#xff1a;第一行&#xff1a;1个*第二行…

深度学习后,图灵奖得主Bengio研究核心是什么?因果表示学习

机器之心报道编辑&#xff1a;魔王、杜伟在近日发表的一篇论文中&#xff0c;图灵奖得主 Yoshua Bengio 等详细介绍了其团队当前的研究重心&#xff1a;将机器学习与因果推理相结合的因果表示学习。研究者不仅全面回顾了因果推理的基础概念&#xff0c;并阐释了其与机器学习的融…

WPF使用Canvas绘制可变矩形

WPF使用Canvas绘制可变矩形 原文:WPF使用Canvas绘制可变矩形版权声明&#xff1a;本文为博主原创文章&#xff0c;未经博主允许不得转载。 https://blog.csdn.net/WANGYAN9110/article/details/38130661 1、问题以及解决办法 最近因为项目需要&#xff0c;需要实现一个位置校对…

Java中关于自增自减

Java中关于自增和自减 关于自增和自减&#xff0c;一直困扰着我&#xff0c;总是学完了当时明白&#xff0c;过了没多长时间又忘了&#xff0c;学的也不牢固。经过老师这一次的讲解&#xff0c;总结的这篇博客&#xff0c;如有错误还请指正。 第一题&#xff1a; 加上括号好看…

【剑指offer】面试题57:和为s的两个数字(Java)

输入一个递增排序的数组和一个数字s&#xff0c;在数组中查找两个数&#xff0c;使得它们的和正好是s。如果有多对数字的和等于s&#xff0c;则输出任意一对即可。 示例 1&#xff1a; 输入&#xff1a;nums [2,7,11,15], target 9 输出&#xff1a;[2,7] 或者 [7,2] 示例 2…

《麻省理工科技评论》发布2021年“全球十大突破性技术”

全文共计8398字&#xff0c;预计阅读时间10分钟来源 | DeepTech深科技&#xff08;转载请注明来源&#xff09;编辑 | 蒲蒲正如比尔盖茨所说&#xff0c;看过这些突破性技术之后&#xff0c;你会觉得 “美好的未来&#xff0c;值得我们为之奋斗”。日前&#xff0c;《麻省理工科…

@Valid的坑

Valid 只能用来验证 RequestBody 标注的参数&#xff0c;并且要写在 RequestBody 之前 转载于:https://www.cnblogs.com/jichen/p/9561622.html

Java——String类的方法

Java——String类的方法 String str1 “abc” 与String str2 new String(“abc”)有什么区别&#xff1f; 字符串常量存储在字符串常量池&#xff0c;目的是共享字符串非常量对象存储在堆中 String的常用方法 常用方法1&#xff1a; int length()&#xff1a;返回字符串的…

【剑指offer】面试题57 - II:和为s的连续正数序列(Java)

输入一个正整数 target &#xff0c;输出所有和为 target 的连续正整数序列&#xff08;至少含有两个数&#xff09;。 序列内的数字由小到大排列&#xff0c;不同序列按照首个数字从小到大排列。 示例 1&#xff1a; 输入&#xff1a;target 9 输出&#xff1a;[[2,3,4],[4…

OpenAI魔法模型DALL-E论文、代码公布!

来源&#xff1a;AI科技评论编译&#xff1a;AI科技评论OpenAI在1月5日公布DALL-E模型以来&#xff0c;人们都惊艳于模型的语言想象力是如此丰富和细致。如今&#xff0c;我们终于等到了论文的公布&#xff0c;从而得以了解DALL-E天马行空创造力背后的奥秘。值得一提的是&#…

MikroTik RouterOS x86最大内存只能支持2G

这个和授权无关&#xff0c;所以多余的内存将不被使用&#xff0c;并且官方逐步放弃对x86的支持&#xff0c;转投硬件以及chr的支持。而且x86架构对于网卡驱动非常挑剔&#xff0c;一不小心购买的网卡是没有驱动的&#xff0c;只能买一些intel或者博通的高端网卡。 在chr版本中…