洛谷传送门 LOJ传送门

本题解思路来自hzwer黄学长

搬运后每个位置应该有的货物数量$num=\frac{\sum a_{i}}{n}$

那么大于$num$的位置都应该把一部分货物提供给其他位置,反之是被提供货物

把源点和汇点想象成货物中心

那么源点向$a_{i}>num$的位置连一条流量为$a_{i}-num$,长度是$0$的边

向$a_{i}<num$的位置向汇点连一条流量为$num-a_{i}$,长度是$0$的边

而相邻的货物间可以随便运货,故连一条流量是$inf$,长度是$1$的边,注意货物的是一个环

源点向汇点的一条可行流可以理解成,连接源点的那个点 贡献出$flow$数量的货物,长途跋涉,到达连接汇点的那个点

我们的目的是保证每个位置多出来的货物全部运给少的,而这个图的最大流其实就是把连接源点的边全都跑满

我们要求的是最少花费,跑最小费用最大流就行了

 1 #include <cmath>
 2 #include <cstdio>
 3 #include <cstring>
 4 #include <algorithm>
 5 #define N1 105
 6 #define M1 50010
 7 #define ll long long
 8 #define dd double
 9 #define inf 0x3f3f3f3f
10 using namespace std;
11
12 int gint()
13 {
14     int ret=0,fh=1;char c=getchar();
15     while(c<'0'||c>'9'){if(c=='-')fh=-1;c=getchar();}
16     while(c>='0'&&c<='9'){ret=ret*10+c-'0';c=getchar();}
17     return ret*fh;
18 }
19
20 int n,m,S,T;
21 struct Edge{
22 int head[N1],to[M1<<1],nxt[M1<<1],dis[M1<<1],flow[M1<<1],cte;
23 void ae(int u,int v,int F,int W)
24 {
25     cte++; to[cte]=v; flow[cte]=F; dis[cte]=W;
26     nxt[cte]=head[u]; head[u]=cte;
27 }
28 }e;
29
30 int que[M1<<1],dis[N1],flow[N1],use[N1],id[N1],hd,tl;
31 int spfa()
32 {
33     int x,j,v;
34     memset(dis,0x3f,sizeof(dis)); memset(use,0,sizeof(use)); memset(flow,0,sizeof(flow));
35     hd=1,tl=0; que[++tl]=S; dis[S]=0; flow[S]=inf; use[S]=1;
36     while(hd<=tl)
37     {
38         x=que[hd++];
39         for(j=e.head[x];j;j=e.nxt[j])
40         {
41             v=e.to[j];
42             if( e.flow[j]>0 && dis[v]>dis[x]+e.dis[j] )
43             {
44                 dis[v]=dis[x]+e.dis[j]; id[v]=j;
45                 flow[v]=min(flow[x],e.flow[j]);
46                 if(!use[v]) que[++tl]=v, use[v]=1;
47             }
48         }
49         use[x]=0;
50     }
51     return dis[T]!=inf;
52 }
53
54 int mxflow,cost;
55 int EK()
56 {
57     int x;
58     while(spfa())
59     {
60         for(x=T;x!=S;x=e.to[id[x]^1])
61         {
62             e.flow[id[x]]-=flow[T];
63             e.flow[id[x]^1]+=flow[T];
64         }
65         mxflow+=flow[T]; cost+=flow[T]*dis[T];
66     }
67     return cost;
68 }
69
70 int a[N1];
71
72 int main()
73 {
74     scanf("%d",&n);
75     int i,x,y,z,sum=0; e.cte=1; S=n+1,T=n+2;
76     for(i=1;i<=n;i++) scanf("%d",&a[i]), sum+=a[i]; sum/=n;
77     for(i=1;i<=n;i++)
78         if(a[i]>sum) e.ae(S,i,a[i]-sum,0), e.ae(i,S,0,0);
79         else if(a[i]<sum) e.ae(i,T,sum-a[i],0), e.ae(T,i,0,0);
80     for(i=1;i<n;i++) e.ae(i,i+1,inf,1), e.ae(i+1,i,0,-1); e.ae(n,1,inf,1), e.ae(1,n,0,-1);
81     for(i=2;i<=n;i++) e.ae(i,i-1,inf,1), e.ae(i-1,i,0,-1); e.ae(1,n,inf,1), e.ae(n,1,0,-1);
82     printf("%d\n",EK());
83     //for(i=1,num=0;i<=n;i++) num+=abs(a[i]-sum);
84     return 0;
85 }

转载于:https://www.cnblogs.com/guapisolo/p/10281864.html

[网络流24题] 负载平衡问题 (费用流)相关推荐

  1. [网络流24题] 航空路线问题 (费用流)

    洛谷传送门 LOJ传送门 这道题的图还挺好想的吧 反正都是无向边,起点走到终点再回到起点,就相当于从起点走$2$次到达终点,且这两次不经过相同的点,还要经过尽可能多的点 很经典的费用流建图 限制点通过 ...

  2. 线性规划与网络流24题 负载平衡问题

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

  3. [网络流24题][CODEVS1914]运输问题(费用流)

    题目描述 传送门 题解 从源点向每一个仓库连边,费用为0,容量为仓库中货物数量: 从每一个零售店向汇点连边,费用为0,容量为零售店应得的货物数量: 从仓库向零售店连边,费用为该仓库运到零售店的费用. ...

  4. loj #6004. 「网络流 24 题」圆桌聚餐(最大流)

    #6004. 「网络流 24 题」圆桌聚餐 内存限制:256 MiB时间限制:5000 ms标准输入输出 题目类型:传统评测方式:Special Judge 上传者: 匿名 提交提交记录统计讨论测试数 ...

  5. 【网络流24题】餐巾计划问题(最小费用最大流)

    [网络流24题]餐巾计划问题(最小费用最大流) 题面 COGS 洛谷上的数据范围更大,而且要开longlong 题解 餐巾的来源分为两种: ①新买的 ②旧的拿去洗 所以,两种情况分别建图 先考虑第一种 ...

  6. 【网络流24题】魔术球问题(最大流)

    [网络流24题]魔术球问题(最大流) 题面 Cogs 题解 是不是像极了最小路径覆盖? 因此,我们枚举放到哪一个球(也可以二分) 然后类似于最小路径覆盖的连边 因为一根柱子对应一个路径的覆盖 所以,提 ...

  7. 734. [网络流24题] 方格取数问题 二分图点权最大独立集/最小割/最大流

    «问题描述: 在一个有m*n 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任 意2 个数所在方格没有公共边,且取出的数的总和最大.试设计一个满足要求的取数算法. «编程任务: 对于给定 ...

  8. 【网络流24题】星际转移问题(最大流)

    [网络流24题]星际转移问题(最大流) 题面 Cogs 题解 因为天数是未知的,所以我们要想办法处理天数 可以选择二分或者依次累加天数 因为数据范围较小,使用二分可能反而复杂度会增高 所以使用不断累加 ...

  9. 【网络流24题】圆桌聚餐(最大流)

    [网络流24题]圆桌聚餐(最大流) 题面 Cogs 题解 这道题很简单 首先每个单位的人数限制 直接从源点向单位连边,容量为人数 同样的, 每个桌子向汇点连边,容量为可以坐的人数 因为每个桌子只能够做 ...

最新文章

  1. MyBatis之CRUD详解
  2. 视频协议 rtsp 默认弱口令 漏洞
  3. makefile文件的一些解读
  4. java逗号的转义字符是,Java是否有'@'字符来转义字符串引号?
  5. 靠谱测试人员需具备逻辑思考能力
  6. dell 服务器r410装系统,dell r410安装windows2003系统
  7. [转载] Python水平自测!100道经典练习题.pdf(附答案)
  8. Q125:PBRT-V3,对比VolPathIntegrator::Li()和EstimateDirect()判断Medium的方式
  9. 2021-06-27Date时间
  10. jq获取验证码成功之后弹出的提示框_验证码填写错误,请重新填写。。。
  11. mysql联合查询_mysql中的联合查询
  12. 中国单箱梁体最宽矮塔斜拉桥合龙
  13. python 操作ps脚本_Python实现PS图像调整颜色梯度效果示例
  14. 计算机禁止开机自启动,通过禁止开机启动项快速开机,提升电脑流畅度,拒绝自启...
  15. MSET key value [key value ...]
  16. stateflow之学习——01
  17. 永久禁用software reporter 进程,占用高解决方法。【永久禁用software_reporter_tool.exe程序】
  18. PDF转换器for mac
  19. 【详细】【转】CentOS 7部署ASP.NET Core应用程序
  20. 【操作系统】概念、功能、特征、分类、运行机制、内核、体系结构、中断和异常、系统调用简介

热门文章

  1. DirectX编程简介
  2. Python数据分析基础
  3. 怀旧不同服务器位面系统,搬运:怀旧服分层和正式服位面的解释
  4. 大数据分析在医疗保健行业中的应用
  5. luogu P1164 小A点菜
  6. 【Pyecharts50例】Calendar/日历图显示中文标签/月份显示中文/星期显示中文/name_map
  7. 六级考研单词之路-二十
  8. 用Spire.XLS给Excel添加水印,打印水印
  9. 滴滴总裁柳青患癌症--- 创业路上的“拼命女性”需要更健康生活方式
  10. 【coding】回溯