有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. linux基础(2)-网卡配置

    常用网卡配置参数 DEVICE=eth0     #指出设备名称 HWADDR=00:0C:29:3C:D2:CA     #网卡的mac地址TYPE=Ethernet     #网络类型为Ether ...

  2. ggplot笔记002——qplot()函数

    qplot()函数 一年前就听说过ggplot,很多人都说ggplot强大,ggplot无所不能,从今天开始就让我们一起来见证一下这个神奇的R包. 首先要加载ggplot2: 1 if(!suppre ...

  3. CodeForces 266E More Queries to Array...(线段树+式子展开)

    开始觉得是规律题的,自以为是的推了一个规律,结果测试数据都没过....看了love神的博客才发现只是把式子展开就找到规律了.不过挺6的是我虽然想错了,但是维护的的东西没有错,只是改改(改了进两个小时好 ...

  4. struts学习(3)

    1 ognl概述 2 ognl入门案例 3 什么是值栈 (1)servlet和action区别 (2)值栈存储位置 4 如何获取值栈对象 5 值栈内部结构 6 向值栈放数据 (1)s:debug标签 ...

  5. TCP/IP 详解笔记

    最早的 TCP 协议文档是 RFC793. TCP 提供一种面向连接的.可靠的字节流服务. 面向连接容易理解,那么什么是字节流服务呢? 答:两个应用程序通过 TCP 连接交换 8 bit 字节构成的字 ...

  6. VS不显示引用的几种情况

    1.动画事件 2协程调用(以字符串的形式) 3.Invoke调用(以字符串的形式)

  7. LightOJ - 1079 概率dp

    题意:n个银行,每个有价值和被抓概率,要求找被抓概率不超过p的最大价值 题解:dp[i][j]表示前i个取j价值的所需最小概率,01背包处理,转移方程dp[i][j]=min(dp[i-1][j],d ...

  8. nginx安装目录

    1.rpm -ql nginx看看通过yum安装到哪里了 2./etc/logrotate.d/nginx    配置 nginx日志轮转 用于logrotate服务的日志切割 3./etc/ngin ...

  9. MySQL管理

    http://www.yiibai.com/mysql/administration.html 在本节中,您将学习有关MySQL管理教程,包括MySQL服务器启动和关闭,MySQL服务器安全性,MyS ...

  10. GET请求与POST请求区别

    GET请求与POST请求区别 a:语义: GET:客户端想获取服务器资源 POST:客户端想传递数据给服务器 b:安全级: GET:不安全 POST:不安全 c:数据长度 GET:客户端发送数据最长1 ...