传送门

费用流sb题。


直接从sss向每个点连边,容量为现有物品量。

然后从ttt向每个点连边,容量为最后库存量。

由于两个点之间可以互相任意运送物品,因此相邻的直接连infinfinf的边就行了。

代码:

  1. #include<bits/stdc++.h>
  2. #define N 205
  3. #define M 50005
  4. using namespace std;
  5. inline int read(){
  6. int ans=0;
  7. char ch=getchar();
  8. while(!isdigit(ch))ch=getchar();
  9. while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
  10. return ans;
  11. }
  12. int n,sum,a[N];
  13. struct edge{int v,next,c,w;};
  14. struct MCMF{
  15. int first[N],cur[N],d[N],pred[N],pos[N],flow[N],s,t,cnt;
  16. bool in[N];
  17. edge e[M];
  18. inline void init(){s=0,t=n+1,memset(first,-1,sizeof(first)),cnt=-1;}
  19. inline void addedge(int u,int v,int c,int w){e[++cnt].v=v,e[cnt].c=c,e[cnt].w=w,e[cnt].next=first[u],first[u]=cnt;}
  20. inline void add(int u,int v,int c,int w){addedge(u,v,c,w),addedge(v,u,0,-w);}
  21. inline bool spfa(){
  22. queue<int>q;
  23. for(int i=1;i<=t;++i)d[i]=0x3f3f3f3f,in[i]=false;
  24. in[s]=true,d[s]=0,pred[t]=-1,flow[s]=0x3f3f3f3f,q.push(s);
  25. while(!q.empty()){
  26. int x=q.front();
  27. q.pop(),in[x]=false;
  28. for(int i=first[x];~i;i=e[i].next){
  29. int v=e[i].v;
  30. if(e[i].c&&d[v]>d[x]+e[i].w){
  31. d[v]=d[x]+e[i].w,flow[v]=min(flow[x],e[i].c),pos[v]=i,pred[v]=x;
  32. if(!in[v])in[v]=true,q.push(v);
  33. }
  34. }
  35. }
  36. return d[t]!=0x3f3f3f3f;
  37. }
  38. inline int solve(){
  39. int ret=0;
  40. for(int w=t;spfa();w=t){
  41. ret+=flow[t]*d[t];
  42. while(w!=s)e[pos[w]].c-=flow[t],e[pos[w]^1].c+=flow[t],w=pred[w];
  43. }
  44. return ret;
  45. }
  46. }mcmf;
  47. int main(){
  48. n=read(),mcmf.init();
  49. for(int i=1,val;i<=n;++i)sum+=(a[i]=read());
  50. for(int i=1;i<=n;++i){
  51. if(a[i]>sum/n)mcmf.add(mcmf.s,i,a[i]-sum/n,0);
  52. if(a[i]<sum/n)mcmf.add(i,mcmf.t,sum/n-a[i],0);
  53. mcmf.add(i,(i^1)?i-1:n,0x3f3f3f3f,1);
  54. mcmf.add(i,(i^n)?i+1:1,0x3f3f3f3f,1);
  55. }
  56. cout<<mcmf.solve();
  57. return 0;
  58. }

2018.10.15 loj#6013. 「网络流 24 题」负载平衡(费用流)的更多相关文章

  1. 2018.10.14 loj#6012. 「网络流 24 题」分配问题(费用流)

    传送门 费用流水题. 依然是照着题意模拟建边就行了. 为了练板子又重新写了一遍费用流. 代码: #include<bits/stdc++.h> #define N 305 #define ...

  2. 2018.10.14 loj#6011. 「网络流 24 题」运输问题(费用流)

    传送门 费用流入门题. 直接按照题意模拟. 把货物的数量当做容量建边. 然后跑一次最小费用流和最大费用流就行了. 代码: #include<bits/stdc++.h> #define N ...

  3. loj #6013. 「网络流 24 题」负载平衡

    #6013. 「网络流 24 题」负载平衡 题目描述 G 公司有 n nn 个沿铁路运输线环形排列的仓库,每个仓库存储的货物数量不等.如何用最少搬运量可以使 n nn 个仓库的库存数量相同.搬运货物时 ...

  4. 2018.10.15 loj#6010. 「网络流 24 题」数字梯形(费用流)

    传送门 费用流经典题. 按照题目要求建边. 为了方便我将所有格子拆点,三种情况下容量分别为111,infinfinf,infinfinf,费用都为validi,jval_{id_{i,j}}valid ...

  5. 【刷题】LOJ 6013 「网络流 24 题」负载平衡

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

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

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

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

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

  8. 2018.10.14 loj#6003. 「网络流 24 题」魔术球(最大流)

    传送门 网络流好题. 这道题可以动态建图. 不难想到把每个球iii都拆点成i1i_1i1​和i2i_2i2​,每次连边(s,i1),(i2,t)(s,i_1),(i_2,t)(s,i1​),(i2​, ...

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

    吐槽题目难度,这个题建模好像比前两个都要难,但是难度评级却比第二个要低. 解题思路 依旧是考虑如何建模和建立源点汇点.每个点的货物数量到最后都一样的话肯定是等于他们的平均值.用 $num$ 数组存储原 ...

随机推荐

  1. jd-eclipse反编译插件的在线安装和使用

    jd-eclipse反编译插件的在线安装和使用 JD-Eclipse是一个Eclipse平台的插件.它允许您调试所有的Java源代码,有了它,以后调试的时候ctrl键就可以一键到底啦.下面简单说说ec ...

  2. AS3中String转换成Boolean

    AS3中, 对布尔值的转换, 规定所有的非空字符串都是true. 下面都不行: var f:Boolean = new Boolean(str); var f:Boolean = str as Boo ...

  3. EditorGUILayout,GUILayout

    bool active=EditorGUILayout.Toggle("active",_bodyObj.active);//bool类型 b2BodyType type=(b2B ...

  4. JavaScript eval_r() 函数

    定义和用法 eval_r() 函数可计算某个字符串,并执行其中的的 JavaScript 代码. 语法 eval_r(string) 参数 描述 string 必需.要计算的字符串,其中含有要计算的  ...

  5. express + mongodb 搭建一个简易网站 (五)

    前面已经将导航中的“所有宝贝”页面连上了mongodb,现在我们就把其他的页面脸上数据库,将整个网站全部实现. 打开routes文件,找到jacket.js,将里面的代码修改如下: var expre ...

  6. Java HashMap,LinkedHashMap,TreeMap

    Java为数据结构中的映射定义了一个接口java.util.Map;它有四个实现类,分别是HashMap Hashtable LinkedHashMap 和TreeMapMap主要用于存储健值对,根据 ...

  7. LOG4J spring与mybatis整合

    1.导入包log4j-1.2.17.jar <dependency>            <groupId>log4j</groupId>            ...

  8. C语言实现24点程序

    一.简介 本程序的思想和算法来自于C语言教材后的实训项目,程序通过用户输入四个整数计算出能够通过加减乘除得到数字24的所有表达式,程序的设计有别于一般通过穷举实现的方式,效率得到提高.算法介绍如下: ...

  9. monkey初接触

    第一次听说monkey,根本不知道是什么东西,脑海里就一个印象,很厉害的自动化测试工具,可是体验了一下,似乎不是那么回事... 一.Monkey 是什么? monkey就是SDK中附带的一个工具. 二 ...

  10. DOS中符号的英文对照

    --------------siwuxie095 1..:point 或 dot 或 period 或 full stop 2.空格:space 或 blank ------------------- ...