有n个盒子(1<=N<=1000)围成一个圈,每个盒子有ai个球,所有盒子的球的总数小于等于n.每一次移动,可以把一个球移动到它的一个相邻的盒子内.
现在要使得每个盒子的球数<=1,求最少的移动次数

输入格式:

n
a1
a2

an

输出格式:

最少移动次数

样例输入:

12
0
0
2
4
3
1
0
0
0
0
0
1

样例输出:

19

网络流真乃xjb题的解题法宝

费用流。

先设超级源点0和超级汇点2*n+1,然后将每个点拆成源点和汇点,然后每个源点先与对应汇点连一条容量无限大,费用为0的边;然后与相邻点的汇点连容量无限大,费用为1的边,最后将各源点与超级源点连一条容量为a[i]费用为0的边,各汇点与超级汇点连一条容量为1费用为0的边,然后跑一遍费用流即可。(为什么?自己思考吧)
 
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
struct edge{
int v,c,f;
}e[];
int fi[],ne[],la[],q[],d[],flow[],x,ansflow,anscost,tot,pe[],n,m,s,t,b[],pre[],u,v,w,f;
void add(int x,int y,int f,int c){
e[++tot].v=y;e[tot].c=c;e[tot].f=f;
!fi[x]?fi[x]=tot:ne[la[x]]=tot;la[x]=tot;
e[++tot].v=x;e[tot].c=-c;e[tot].f=;
!fi[y]?fi[y]=tot:ne[la[y]]=tot;la[y]=tot;
}
bool spfa(int s,int t){
int H=,T=;
memset(d,0x3f,sizeof(d));
memset(flow,,sizeof(flow));
q[++T]=s;b[s]=;d[s]=;pre[s]=;flow[s]=0x7fffffff;
while(H<T){
int x=q[++H];
for(int i=fi[x];i;i=ne[i]){
int y=e[i].v,z=e[i].f,c=e[i].c;
if(z>&&d[y]>d[x]+c){
d[y]=d[x]+c;
pre[y]=x;
pe[y]=i;
flow[y]=min(flow[x],z);
if(!b[y])b[y]=,q[++T]=y;
}
} b[x]=;
}
return d[t]!=0x3f3f3f3f;
}
void maxflow(){
while(spfa(s,t)){
int k=t;
while(k!=s){
e[pe[k]].f-=flow[t];
e[pe[k]^].f+=flow[t];
k=pre[k];
}
ansflow+=flow[t];
anscost+=d[t]*flow[t];
}
}
int main(){
scanf("%d",&n);
tot=;
for(int i=;i<=n;i++){
scanf("%d",&x);
int pr=i==?n:i-,nx=i==n?:i+;
add(,i,x,);
add(i,nx+n,0x3f3f3f3f,);
add(nx+n,i,0x3f3f3f3f,);
add(i,pr+n,0x3f3f3f3f,);
add(pr+n,i,0x3f3f3f3f,);
add(i,i+n,0x3f3f3f3f,);
add(i+n,i,0x3f3f3f3f,);
add(i+n,*n+,,);
}
s=;t=*n+;
maxflow();
printf("%d",anscost);
}

 
 
 

球的移动(move)的更多相关文章

  1. JAVA 多线程制作大球吃小球 一、实现球的自动生成及运动 生产消费模型

    前几天用多线程实现了创建小球并移动,想到大鱼吃小鱼,便突发奇想要写一个大球吃小球.首先第一步自然是先把界面弄好啦 public class BallUI extends JPanel { privat ...

  2. 信息安全系统设计基础课程实践:简单TUI游戏设计

    简单TUI游戏设计                目       录               一                      Curses库简介与基本开发方法             ...

  3. ZBrush快捷键与鼠标操作

    ZBrush是一款3D图形绘制软件,功能十分强大,且比较复杂,除了菜单栏功能按钮,ZBrush还提供了一系列快捷键与鼠标操作,熟练掌握ZBrush快捷键与鼠标操作,可以帮助您大大节省图形创作时间.下面 ...

  4. 【LeetCode】5686. 移动所有球到每个盒子所需的最小操作数 Minimum Number of Operations to Move All Balls to Each Box

    作者: 负雪明烛 id: fuxuemingzhu 公众号:负雪明烛 本文关键词:LeetCode,力扣,算法,算法题,交替合并字符串,Merge Strings Alternately,刷题群 目录 ...

  5. html5悬浮球效果

    自己想做一个自己的网站,觉得自适应的效果会好一点,但是放到手机端的话,菜单显示是个问题.所以自己试着写了一个悬浮球菜单的效果. 好了,上代码. 这里有四个文件要用: jqurey.js//因为基于jq ...

  6. 怎么运用ZBrush中的Z球制作身体部分

    本文主要讲解利用ZSphere[Z球]创建人体的大体轮廓,这是ZBrush®软件制作模型的第一步,这一阶段中我们需要反复调节人体比例结构,为以后深入制作打下基础,具体制作过程如下. 查看更多内容请直接 ...

  7. pygame写的弹力球

    这是pygame写的弹力球 运行效果: ======================================================== 代码部分: ================= ...

  8. 2017了,回家前 "年末" 分享:下雨,飘雪,红包雨,碰撞球,自定义View

    (本博客为原创:http://www.cnblogs.com/linguanh/) 目录: 效果展示 感想 代码拆解 开源地址 效果展示 有没有兴趣继续看下去,直接看下"颜值"是第 ...

  9. pygame系列_弹力球

    这是pygame写的弹力球 运行效果: ======================================================== 代码部分: ================= ...

随机推荐

  1. 1.java实现——正规表达式判断

    目标:这个代码仅局限于所展示的正规表达式判断,也就是这是一个较单一的正规表达式判断(简易版). 既然是简易版的,所以若要修改这个正规表达式也是非常容易的,只要将二维数组中的数组修改即可.数组数据依据, ...

  2. BZOJ 1941 kd-tree

    模板题 题意说的可能有点不清楚 一开始的点必须在给定的n个点里面 所以枚举点 然后ask最大和最小值 估价函数中 最大值的写法和最小值不同 全部取max 而最小值在估价时 如果在某个点管辖的空间里 就 ...

  3. ASP.NET上传文件,已经上传的大小保存在session中,在另一个页面中读取session的值不行

    想自己做个ASP.NET上传文件时显示进度条的, 按照自己的想法,其实也就是显示每次已经上传的字节,从网上找到一个方法是能够把文件变成流以后再慢慢写入的,我在那个循环写入的时候每循环一次都把已经上传的 ...

  4. C#验证类

    #region 是不是中国电话,格式010-85849685 /**////<summary> /// 是不是中国电话,格式010-85849685 ///</summary> ...

  5. Qt5 窗口内的控件随窗口大小自动变化

    http://www.bubuko.com/infodetail-827151.html 讲的很详细

  6. wpf数据绑定的论述

    (1)绑定模式: <Lable x:Name=lab Content={binding UserName} /> <!--binding相当于SetBinding--> Con ...

  7. 用系统工具sxstrace检查缺少的VC运行时组件

    在管理员运行的命令提示符中输入sxstrace获得如下帮助: C:\>sxstrace WinSxs Tracing Utility. Usage: SxsTrace [Options] Opt ...

  8. hdu 2147 kiki's game(找规律)

    kiki's game Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 40000/10000 K (Java/Others)Total ...

  9. lucene搜索之facet查询原理和facet查询实例——TODO

    转自:http://www.lai18.com/content/7084969.html Facet说明 我们在浏览网站的时候,经常会遇到按某一类条件查询的情况,这种情况尤以电商网站最多,以天猫商城为 ...

  10. SQL Server循环插入数据

    --循环执行插入10000条数据declare @ID intdeclare @eigyousyocode nvarchar(16)declare @datet datetimedeclare @pl ...