传送门

费用流sb题。


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

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

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

代码:

#include<bits/stdc++.h>
#define N 205
#define M 50005
using namespace std;
inline int read(){
	int ans=0;
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
	return ans;
}
int n,sum,a[N];
struct edge{int v,next,c,w;};
struct MCMF{
	int first[N],cur[N],d[N],pred[N],pos[N],flow[N],s,t,cnt;
	bool in[N];
	edge e[M];
	inline void init(){s=0,t=n+1,memset(first,-1,sizeof(first)),cnt=-1;}
	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;}
	inline void add(int u,int v,int c,int w){addedge(u,v,c,w),addedge(v,u,0,-w);}
	inline bool spfa(){
		queue<int>q;
		for(int i=1;i<=t;++i)d[i]=0x3f3f3f3f,in[i]=false;
		in[s]=true,d[s]=0,pred[t]=-1,flow[s]=0x3f3f3f3f,q.push(s);
		while(!q.empty()){
			int x=q.front();
			q.pop(),in[x]=false;
			for(int i=first[x];~i;i=e[i].next){
				int v=e[i].v;
				if(e[i].c&&d[v]>d[x]+e[i].w){
					d[v]=d[x]+e[i].w,flow[v]=min(flow[x],e[i].c),pos[v]=i,pred[v]=x;
					if(!in[v])in[v]=true,q.push(v);
				}
			}
		}
		return d[t]!=0x3f3f3f3f;
	}
	inline int solve(){
		int ret=0;
		for(int w=t;spfa();w=t){
			ret+=flow[t]*d[t];
			while(w!=s)e[pos[w]].c-=flow[t],e[pos[w]^1].c+=flow[t],w=pred[w];
		}
		return ret;
	}
}mcmf;
int main(){
	n=read(),mcmf.init();
	for(int i=1,val;i<=n;++i)sum+=(a[i]=read());
	for(int i=1;i<=n;++i){
		if(a[i]>sum/n)mcmf.add(mcmf.s,i,a[i]-sum/n,0);
		if(a[i]<sum/n)mcmf.add(i,mcmf.t,sum/n-a[i],0);
		mcmf.add(i,(i^1)?i-1:n,0x3f3f3f3f,1);
		mcmf.add(i,(i^n)?i+1:1,0x3f3f3f3f,1);
	}
	cout<<mcmf.solve();
	return 0;
}

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. IOS CFBundleIdentifier

    CFBundleIdentifier  CFBundleIdentifier 必须是com.12306.aaa 这样的格式吗       AppID   用通配符格式的AppID方便.   AppSt ...

  2. Unresolved external CheckAutoResult

    // [Linker   Error]Unresolved   external   'System::__linkproc__   __fastcall   CheckAutoResult() '  ...

  3. java基础思维导图,让java不再难懂

    java基础思维导图,让java不再难懂 原文链接  https://my.oschina.net/u/3080373/blog/873056 最近看了一些文章的思维导图,发现思维导图真是个强大的工具 ...

  4. Mybatis知识(2)

    1.#{}和${}的区别是什么? 注:这道题是面试官面试我同事的. 答:${}是Properties文件中的变量占位符,它可以用于标签属性值和sql内部,属于静态文本替换,比如${driver}会被静 ...

  5. null id in entry (don't flush the Session after an exception occurs)

    null id in entry (don't flush the Session after an exception occurs) 遇到这个异常实属不小心所致,最初看到异出的错误信息时我误认为是 ...

  6. js实现jquery函数animate动画效果

    <script> function animate(obj, json, interval, sp, fn) { clearInterval(obj.timer); function ge ...

  7. 复习:使用HTML编写简单程序

    今天我试着用HTML编写了九九乘法表 代码如下 浏览器显示如下 2.输出静夜思 代码如下 2.浏览器显示

  8. 2017面向对象程序设计(Java)第三周学习总结

    白驹过隙,日月如梭,一转眼,我们已经度过了第三周的学习时光,随着时间的一天天流逝,我么对知识的积累也逐渐增多.当然,我们还有许许多多需要改进的地方.下面,我将对第三周的助教工作进行总结,望老师及同学们 ...

  9. 使用HTTP头去绕过WAF(bypasswaf)

    在用node http get 请求的时候,发现的 解决方案: Add headers to all Burp requests to bypass some WAF products. This e ...

  10. Bioconductor应用领域之基因芯片

    引用自https://mp.weixin.qq.com/s?__biz=MzU4NjU4ODQ2MQ==&mid=2247484662&idx=1&sn=194668553f9 ...