有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. DL四(预处理:主成分分析与白化 Preprocessing PCA and Whitening )

    预处理:主成分分析与白化 Preprocessing:PCA and Whitening 一主成分分析 PCA 1.1 基本术语 主成分分析 Principal Components Analysis ...

  2. nodejs 中module.exports 和 exports 区别详细介绍

    你肯定非常熟悉nodejs模块中的exports对象,你可以用它创建你的模块接下来介绍创建过程,感兴趣的朋友可以参考下 你肯定非常熟悉nodejs模块中的exports对象,你可以用它创建你的模块.例 ...

  3. 3Sum,4Sum问题

    //三数和为0的问题.要求去重,并且输出数字有序.public List<List<Integer>> threeSum(int[] nums) { Arrays.sort(n ...

  4. 【转载】JAVA中线程的两种实现方法-实现Runnable接口和继承Thread类

    转自: http://blog.csdn.net/sunguangran/article/details/6069317 非常感谢原作者,整理的这么详细. 在java中可有两种方式实现多线程,一种是继 ...

  5. js代理模式

    代理模式的关键是,当客户不方便直接访问一个对象或者不满足需要的时候,提供一个替身对象来控制对这个对象的访问,客户实际上访问的是替身对象.替身对象对请求做出一些处理之后,再把请求转交给本体对象. 代理模 ...

  6. 自己动手实现一个简化版的requireJs

    一直想实现一个简单版本的requireJs,最直接的办法去看requireJs源码搞明白原理,但是能力有限requireJs的源码比想象的要复杂许多,看了几遍也不是很明白,最后通过搜索找到了一些有价值 ...

  7. java中finally的使用

    以前认为finally没用,但是实际上在try使用中是不可缺少的.

  8. MySQL 分区知识点(二)

    前言: MySQL 5.1+ 版本就开始支持分区功能了. 分区本质上就是在物理文件层面划分了多个物理子表来支撑,或者说是一组底层表的句柄对象的封装. 对于分区表的请求,都是通过句柄对象转化成对存储引擎 ...

  9. DB21019E An error occurred while accessing the directory "/root".

    如果是在Linux上刚装完DB2即刻建立database,可能会遇到错误DB21019E An error occurred while accessing the directory "/ ...

  10. js 对象可枚举属性以及for in 循环和for of 循环

    js中每个对象的属性(js里万物皆属性,对象的属性也是对象)都有一个属性叫enumerable(可枚举性),这个属性true/false决定了该对象的属性是否可枚举(就是让一些方法访问到这个属性). ...