题目描述

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 负载平衡问题(费用流)的更多相关文章

  1. 2018.10.15 loj#6013. 「网络流 24 题」负载平衡(费用流)

    传送门 费用流sb题. 直接从sss向每个点连边,容量为现有物品量. 然后从ttt向每个点连边,容量为最后库存量. 由于两个点之间可以互相任意运送物品,因此相邻的直接连infinfinf的边就行了. ...

  2. 洛谷P4016 负载平衡问题 费用流

    这道题还是很好的. 考察了选手对网络流的理解. 首先,任意两个相邻点之间的运货量时没有限制的. 我们可以将相邻点之间的流量建为无限大,单位费用设为 1,代表运输一个货物需耗费一个代价. 由于题目要求最 ...

  3. LibreOJ #6013. 「网络流 24 题」负载平衡 最小费用最大流 供应平衡问题

    #6013. 「网络流 24 题」负载平衡 内存限制:256 MiB时间限制:1000 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: 匿名 提交提交记录统计讨论测试数据   题目描述 ...

  4. [网络流 24 题] luoguP4016 负载平衡问题

    [返回网络流 24 题索引] 题目描述 有成环状的 nnn 堆纸牌,现将一张纸牌移动到其邻堆称为一次操作.求使得所有堆纸牌数相等的最少移动次数. Solution 4016\text{Solution ...

  5. 洛谷 P4016负载平衡问题【费用流】题解+AC代码

    洛谷 P4016负载平衡问题 P4014 分配问题[费用流]题解+AC代码 负载平衡问题 题目描述 GG 公司有n个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使 n ...

  6. Libre 6013 「网络流 24 题」负载平衡 (网络流,最小费用最大流)

    Libre 6013 「网络流 24 题」负载平衡 (网络流,最小费用最大流) Description G 公司有n 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使n ...

  7. P4016 负载平衡问题(最小费用最大流)

    P4016 负载平衡问题 题目描述 GG 公司有 nn 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使 nn 个仓库的库存数量相同.搬运货物时,只能在相邻的仓库之间搬 ...

  8. 【网络流24题】No.19 负载平衡问题 (费用流)

    [题意] G 公司有 n 个沿铁路运输线环形排列的仓库, 每个仓库存储的货物数量不等. 如何用最少搬运量可以使 n 个仓库的库存数量相同.搬运货物时,只能在相邻的仓库之间搬运. 输入文件示例input ...

  9. 「网络流24题」「LuoguP4016」 负载平衡问题

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

随机推荐

  1. Data flow diagram-数据流图

    A DFD shows what kind of information will be input to and output from the system, how the data will ...

  2. php八大设计模式之装饰器模式

    我们都知道,得到一匹布需要大概这么几步: 1.染色 2.印花 3.裁剪 这种形式在面向对象中怎么实现呢? 面向过程[继承模式]实现: 继承模式得到需要的布料,一步一步的加工. 继承的层次越来越深,扩展 ...

  3. 一个Web报表项目的性能分析和优化实践(二):MySQL数据库连接不够用(TooManyConnections)问题的一次分析和解决案例

    最近,项目中遇到了数据库连接不够的问题. 异常信息com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: Data ...

  4. cxf 实例解读

    1.sample 实例之一---java_first_pojo 服务端发布服务的方法: 1 HelloWorldImpl helloworldImpl = new HelloWorldImpl(); ...

  5. ArcGIS api for javascript——1,2,3综合

    <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"% ...

  6. 设计模式之九:建造者模式(Builder)

    建造者模式: 将一个复杂对象的建造过程和它的表示分离开来,这样同样的建造过程能够创建不同的表示. Separate the construction of a complex object from ...

  7. JAVA并发-为现有的线程安全类添加原子方法

    JAVA中有许多线程安全的基础模块类,一般情况下,这些基础模块类能满足我们需要的所有操作,但更多时候,他们并不能满足我们所有的需要.此时,我们需要想办法在不破坏已有的线程安全类的基础上添加一个新的原子 ...

  8. nios sgdma(Scatter-Gather dma)示例

    在 Quartus7.2之后的版本中,除了原有的基于avalon-mm总线的DMA之外,还增加了Scatter-Gather DMA这种基于avalon-ST流总线的DMA IP核,它更适合与大量数据 ...

  9. 9.ng-options

    转自:https://www.cnblogs.com/best/tag/Angular/ 该指令允许你基于一个迭代表达式添加选项 <select ng-model="color&quo ...

  10. XDoclet学习

    XDoclet可以通过你在java源代码中的一些特殊的注释信息,自动为你生成配置文件.源代码等等,例如web.ejb的部署描述文件.为你生成struts的struts-config.xml配置文件.j ...