有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. [转载]spring security 的 logout 功能

    原文地址:security 的 logout 功能">spring security 的 logout 功能作者:sumnny 转载自:http://lengyun3566.iteye ...

  2. JConsole操作手册

    一篇Sun项目主页上介绍JConsole使用的文章,前段时间性能测试的时候大概翻译了一下以便学习,今天整理一下发上来,有些地方也不知道怎么翻,就保留了原文,可能还好理解点,呵呵,水平有限,翻的不好,大 ...

  3. 【转】数据库获得当前时间getdate()

    CONVERT(nvarchar(10),count_time,121): CONVERT为日期转换函数,一般就是在时间类型 (datetime,smalldatetime)与字符串类型(nchar, ...

  4. Android在layout xml中使用ViewStub完成动态加载

    Android在layout xml中使用ViewStub完成动态加载 一.Layout XML文件常见的两种模块加载方式 1.静态加载:被加载的模块和其它模块加载的时间一样. <include ...

  5. jmeter-察看结果树-响应数据,中文显示乱码问题处理

    第一步: 打开路径:jmeter\bin\jmeter.properties 文件 第二步: 文件中默认编码为:ISO-8859-1 修改为utf-8 sampleresult.default.enc ...

  6. 解决:return _compile(pattern, flags).search(string) TypeError: expected string or buffer

    今天写爬虫,爬取MM图片页面的标题时,遇到了一个问题,上图: 看看我的代码: import urllib import urllib2 import re class JPMSG: def __ini ...

  7. url编码有个bug,不能直接用decodeURIComponent,如果遇到前面的$会报错。

    decodeURIComponent("%") ----->Uncaught URIError: URI malformed decodeURIComponent(" ...

  8. hdu-1012-u Calculate e(水题)

    #include <iostream> using namespace std; int main() { ]; jiecheng[] = jiecheng[] = ; ; i<; ...

  9. Codeforces Round #258 (Div. 2)C(暴力枚举)

    就枚举四种情况,哪种能行就是yes了.很简单,关键是写法,我写的又丑又长...看了zhanyl的写法顿时心生敬佩.写的干净利落,简直美如画...这是功力的体现! 以下是zhanyl的写法,转载在此以供 ...

  10. UVA 10417 Gift Exchanging

    #include <iostream> #include <cstring> #include <stdio.h> #include <math.h> ...