求出平均数sum,对于大于sum的点连接(s,i,a[i]-sum,0),表示这个点可以流出多余的部分,对于小于sum的点连接(i,t,sum-a[i],0)表示这个点可以接受少的部分,然后每个点向相邻的两个点连(i,j,inf,1)表示可以任意转移,每转移一份产生1费用,注意这是个环所以首尾相连。然后跑最小费用最大流即可。

#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
const int N=1000005,inf=1e9;
int n,h[N],cnt=1,dis[N],fr[N],ans,s,t,a[105],sum;
bool v[N];
struct qwe
{
int ne,no,to,va,c;
}e[N<<2];
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
void add(int u,int v,int w,int c)
{
cnt++;
e[cnt].ne=h[u];
e[cnt].no=u;
e[cnt].to=v;
e[cnt].va=w;
e[cnt].c=c;
h[u]=cnt;
}
void ins(int u,int v,int w,int c)
{//cout<<u<<" "<<v<<" "<<w<<endl;
add(u,v,w,c);
add(v,u,0,-c);
}
bool spfa()
{
queue<int>q;
for(int i=s;i<=t;i++)
dis[i]=inf;
dis[s]=0;
v[s]=1;
q.push(s);
while(!q.empty())
{
int u=q.front();
q.pop();
v[u]=0;
for(int i=h[u];i;i=e[i].ne)
if(e[i].va>0&&dis[e[i].to]>dis[u]+e[i].c)
{
dis[e[i].to]=dis[u]+e[i].c;
fr[e[i].to]=i;
if(!v[e[i].to])
{
v[e[i].to]=1;
q.push(e[i].to);
}
}
}
return dis[t]!=inf;
}
void mcf()
{//cout<<"OK"<<endl;
int x=inf;
for(int i=fr[t];i;i=fr[e[i].no])
x=min(x,e[i].va);
for(int i=fr[t];i;i=fr[e[i].no])
{
e[i].va-=x;
e[i^1].va+=x;
ans+=x*e[i].c;
}
}
int main()
{
n=read();
for(int i=1;i<=n;i++)
a[i]=read(),sum+=a[i];
s=0,t=n+1;
sum/=n;
for(int i=1;i<=n;i++)
{
if(a[i]>sum)
ins(s,i,a[i]-sum,0);
else
ins(i,t,sum-a[i],0);
}
for(int i=1;i<=n;i++)
{
ins(i,(i+1>n)?1:i+1,inf,1);
ins(i,(i-1<1)?n:i-1,inf,1);
}
while(spfa())
mcf();
printf("%d\n",ans);
return 0;
}

最新文章

  1. [mk] 喝一杯咖啡, 写一写 Makefile
  2. 脱离 Spring 实现复杂嵌套事务,之一(必要的概念)
  3. 2016年11月14日 星期一 --出埃及记 Exodus 20:5
  4. CSS经典布局-圣杯布局、双飞翼布局
  5. RR区间锁 不是唯一索引,即使区间内没值,也锁
  6. Day3-函数及作用域
  7. jquery的2.0.3版本源码系列(3):96行-283行,给JQ对象,添加一些方法和属性
  8. 用StringBuilder和StringBuffer实现的Unicode解码方法的比较(Java)
  9. numpy的初探
  10. React从入门到放弃之前奏(5):ReactRouter4
  11. 树莓派3B+(二)
  12. XV Open Cup named after E.V. Pankratiev. GP of Central Europe (AMPPZ-2014)--B.Petrol
  13. aio,nio ,io 心得
  14. TFS2018 连接 K8S集群的方法
  15. safari 收藏导出 手机safari 导出
  16. SQLSERVER 设置默认值
  17. docker的swarm介绍
  18. LinkedHashMap结构get和put源码流程简析及LRU应用
  19. PgSQL基础之 pgsql与mysql的简单区别
  20. 告诉你什么是javascript的回调函数

热门文章

  1. App竞品技术分析 (3)减小安装包的体积(转)
  2. linux日志服务器审计客户端history记录
  3. MySQL命令行自动补全表名
  4. django 简易博客开发 2 模板和数据查询
  5. Openwrt挂载NTFS硬盘提示“只读”错误的解决方法!
  6. C#&amp;.NET高级面试题
  7. spinlock in linux kernel
  8. html2canvas 导出包含滚动条的内容
  9. IIS7添加虚拟目录映射另一台服务器的共享文件夹
  10. 2016/4/7 datatype:①json ②XML