LuoguP4016 负载平衡问题(费用流)
题目描述
G 公司有 n 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等。如何用最少搬运量可以使 n 个仓库的库存数量相同。搬运货物时,只能在相邻的仓库之间搬运。
输入输出格式
输入格式:
文件的第 11 行中有 11 个正整数 n,表示有 n 个仓库。
第 22 行中有 n 个正整数,表示 n 个仓库的库存量。
输出格式:
输出最少搬运量。
解题思路:
因为已知了最终状态,相当于已知每个点的搬运数量。
现在就是令搬运次数尽量少。
相当于每个点与相邻点连inf的边费用为1
大于平均值与汇点连流量为增量边费用为0
源点与小于平均值连流量为增量边费用为0
跑费用流就好了。
代码:
#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
const int oo=0x7f7f7f7f;
struct pnt{
int hd;
int val;
int dis;
int pre;
int lst;
bool vis;
}p[];
struct ent{
int twd;
int lst;
int vls;
int cst;
}e[];
int cnt;
int n,m;
int s,t;
int a[];
std::queue<int>Q;
void ade(int f,int t,int mf,int ct)
{
cnt++;
e[cnt].twd=t;
e[cnt].lst=p[f].hd;
e[cnt].vls=mf;
e[cnt].cst=ct;
p[f].hd=cnt;
return ;
}
bool Spfa(void)
{
while(!Q.empty())
Q.pop();
for(int i=;i<=n+;i++)
{
p[i].val=0x3f3f3f3f;
p[i].dis=0x3f3f3f3f;
p[i].vis=false;
}
p[s].dis=;
p[s].vis=true;
p[t].pre=-;
Q.push(s);
while(!Q.empty())
{
int x=Q.front();
Q.pop();
p[x].vis=false;
for(int i=p[x].hd;i;i=e[i].lst)
{
int to=e[i].twd;
if(e[i].vls>&&p[to].dis>p[x].dis+e[i].cst)
{
p[to].dis=p[x].dis+e[i].cst;
p[to].val=std::min(p[x].val,e[i].vls);
p[to].pre=x;
p[to].lst=i;
if(!p[to].vis)
{
p[to].vis=true;
Q.push(to);
}
}
}
}
return p[t].pre!=-;
}
int Ek(void)
{
int ret=;
while(Spfa())
{
ret+=p[t].dis*p[t].val;
for(int i=t;i!=s;i=p[i].pre)
{
e[p[i].lst].vls-=p[t].val;
e[((p[i].lst-)^)+].vls+=p[t].val;
}
}
return ret;
}
int main()
{
// freopen("a.in","r",stdin);
int sum=;
scanf("%d",&n);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
sum+=a[i];
}
s=n+,t=n+;
sum/=n;
for(int i=;i<=n;i++)
{
if(a[i]>sum)
{
ade(s,i,a[i]-sum,);
ade(i,s,,);
}else{
ade(i,t,sum-a[i],);
ade(t,i,,);
}
}
for(int i=;i<n;i++)
{
ade(i,i+,oo,);ade(i+,i,,-);
ade(i+,i,oo,);ade(i,i+,,-);
}
ade(,n,oo,);ade(n,,,-);
ade(n,,oo,);ade(,n,,-);
printf("%d\n",Ek());
return ;
}
LuoguP4016 负载平衡问题(费用流)的更多相关文章
- 2018.10.15 loj#6013. 「网络流 24 题」负载平衡(费用流)
传送门 费用流sb题. 直接从sss向每个点连边,容量为现有物品量. 然后从ttt向每个点连边,容量为最后库存量. 由于两个点之间可以互相任意运送物品,因此相邻的直接连infinfinf的边就行了. ...
- 洛谷P4016 负载平衡问题 费用流
这道题还是很好的. 考察了选手对网络流的理解. 首先,任意两个相邻点之间的运货量时没有限制的. 我们可以将相邻点之间的流量建为无限大,单位费用设为 1,代表运输一个货物需耗费一个代价. 由于题目要求最 ...
- LibreOJ #6013. 「网络流 24 题」负载平衡 最小费用最大流 供应平衡问题
#6013. 「网络流 24 题」负载平衡 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据 题目描述 ...
- [网络流 24 题] luoguP4016 负载平衡问题
[返回网络流 24 题索引] 题目描述 有成环状的 nnn 堆纸牌,现将一张纸牌移动到其邻堆称为一次操作.求使得所有堆纸牌数相等的最少移动次数. Solution 4016\text{Solution ...
- 洛谷 P4016负载平衡问题【费用流】题解+AC代码
洛谷 P4016负载平衡问题 P4014 分配问题[费用流]题解+AC代码 负载平衡问题 题目描述 GG 公司有n个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使 n ...
- Libre 6013 「网络流 24 题」负载平衡 (网络流,最小费用最大流)
Libre 6013 「网络流 24 题」负载平衡 (网络流,最小费用最大流) Description G 公司有n 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使n ...
- P4016 负载平衡问题(最小费用最大流)
P4016 负载平衡问题 题目描述 GG 公司有 nn 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使 nn 个仓库的库存数量相同.搬运货物时,只能在相邻的仓库之间搬 ...
- 【网络流24题】No.19 负载平衡问题 (费用流)
[题意] G 公司有 n 个沿铁路运输线环形排列的仓库, 每个仓库存储的货物数量不等. 如何用最少搬运量可以使 n 个仓库的库存数量相同.搬运货物时,只能在相邻的仓库之间搬运. 输入文件示例input ...
- 「网络流24题」「LuoguP4016」 负载平衡问题
Description GGG 公司有 nnn 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使 nnn 个仓库的库存数量相同.搬运货物时,只能在相邻的仓库之间搬运. ...
随机推荐
- Zero-input latency scheduler: Scheduler Overhaul
Scheduler Overhaul, with contributions from rbyers, sadrul, rjkroege, sievers, epenner, skyostil, br ...
- NodeJS学习笔记 (27)实用工具模块-util(ok)
debuglog(section) 很有用的调试方法.可以通过 util.debuglog(name) 来创建一个调试fn,这个fn的特点是,只有在运行程序时候,声明环境变量NODE_DEBUG=na ...
- ln---创建链接
ln命令用来为文件创件连接,连接类型分为硬连接和符号连接两种,默认的连接类型是硬连接.如果要创建符号连接必须使用"-s"选项. 注意:符号链接文件不是一个独立的文件,它的许多属性依 ...
- 20180929 北京大学 人工智能实践:Tensorflow笔记02
https://www.bilibili.com/video/av22530538/?p=16 https://www.bilibili.com/video/av22530538/?p=14 (完)
- 大型网站架构之JAVA中间件
中间件就是在大型网站中,帮助各子模块间实现互相访问,消息共享或统一访问等功能的软件产品.常见的有: 远程服务框架中间件:主要解决各子模块之间互相访问的问题. 消息队列中间件:主要解决各子模之间消息共享 ...
- 分析一下jquery中的ajax操作
在web前端开发中,ajax是很重要的一项技术,用原生写起来很是麻烦,需要一大堆js代码,而到了jq里就被精简了许多,一起来看看: jquery中的ajax分为三种方式: 1.$.get(),get方 ...
- spring之DelegatingFilterProxy
DelegatingFilterProxy是一个标准servlet Filter的代理,代理实现了Filter接口的spring管理的Bean.支持一个在web.xml的init-param定义的&q ...
- Ubuntu 16.04 实现有线 无线同时用
因为工作的原因,经常会用有线网卡连接服务器进行配置,无线网卡上外网. 一.查看当前网关信息 pipci@ubuntu:~$ ip route showdefault via 192.168.2.1 d ...
- ES6学习笔记(六)数组的扩展
1.扩展运算符 1.1含义 扩展运算符(spread)是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. console.log(...[1, 2, 3]) // ...
- Zabbix监控平台部署
系统环境 Server端:192.168.149.128 Agent端:192.168.149.129 一.lamp环境安装 1.yum安装lamp yum install -y http http- ...