球的移动(move)
有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题的解题法宝
费用流。
#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)的更多相关文章
- JAVA 多线程制作大球吃小球 一、实现球的自动生成及运动 生产消费模型
前几天用多线程实现了创建小球并移动,想到大鱼吃小鱼,便突发奇想要写一个大球吃小球.首先第一步自然是先把界面弄好啦 public class BallUI extends JPanel { privat ...
- 信息安全系统设计基础课程实践:简单TUI游戏设计
简单TUI游戏设计 目 录 一 Curses库简介与基本开发方法 ...
- ZBrush快捷键与鼠标操作
ZBrush是一款3D图形绘制软件,功能十分强大,且比较复杂,除了菜单栏功能按钮,ZBrush还提供了一系列快捷键与鼠标操作,熟练掌握ZBrush快捷键与鼠标操作,可以帮助您大大节省图形创作时间.下面 ...
- 【LeetCode】5686. 移动所有球到每个盒子所需的最小操作数 Minimum Number of Operations to Move All Balls to Each Box
作者: 负雪明烛 id: fuxuemingzhu 公众号:负雪明烛 本文关键词:LeetCode,力扣,算法,算法题,交替合并字符串,Merge Strings Alternately,刷题群 目录 ...
- html5悬浮球效果
自己想做一个自己的网站,觉得自适应的效果会好一点,但是放到手机端的话,菜单显示是个问题.所以自己试着写了一个悬浮球菜单的效果. 好了,上代码. 这里有四个文件要用: jqurey.js//因为基于jq ...
- 怎么运用ZBrush中的Z球制作身体部分
本文主要讲解利用ZSphere[Z球]创建人体的大体轮廓,这是ZBrush®软件制作模型的第一步,这一阶段中我们需要反复调节人体比例结构,为以后深入制作打下基础,具体制作过程如下. 查看更多内容请直接 ...
- pygame写的弹力球
这是pygame写的弹力球 运行效果: ======================================================== 代码部分: ================= ...
- 2017了,回家前 "年末" 分享:下雨,飘雪,红包雨,碰撞球,自定义View
(本博客为原创:http://www.cnblogs.com/linguanh/) 目录: 效果展示 感想 代码拆解 开源地址 效果展示 有没有兴趣继续看下去,直接看下"颜值"是第 ...
- pygame系列_弹力球
这是pygame写的弹力球 运行效果: ======================================================== 代码部分: ================= ...
随机推荐
- Ubuntu下用crontab 部署定时任务
用php做了一个网站,其中一个统计工能,需要每周定时用行.想看看有什么方法,之前看别人的东西,一般有2中方式,一个是php自带的定时任务,一个是用系统 带的,linux下的crontab和window ...
- web.xml里报错:Multiple annotations found at this line:
在web.xml 中添加错误页面配置,出现了这个报错 具体情况是这样的: 错误信息: Multiple annotations found at this line: - cvc-complex-ty ...
- list添加map问题
结论: list添加添加的是map的地址 List<Map<String, Object>> list = new ArrayList<>(); Map<St ...
- WinDBG__独立安装文件
debugging tools for windows 1. 来自于网页:http://rxwen.blogspot.hk/2010/04/standalone-windbg-v6120002633. ...
- 使用roboware创建工作空间
1.打开终端,启动roboware软件: $roboware-studio 2.在欢迎使用的页面点新建工作区,工作区的名字建议写为:catkin_ws,路径放在home文件夹或者任意你想放的文件夹中. ...
- codeforces 798C.Mike and gcd problem 解题报告
题目意思:给出一个n个数的序列:a1,a2,...,an (n的范围[2,100000],ax的范围[1,1e9] ) 现在需要对序列a进行若干变换,来构造一个beautiful的序列: b1,b2, ...
- DP的四边形优化
DP的四边形优化 一.进行四边形优化需要满足的条件 1.状态转移方程如下: m(i,j)表示对应i,j情况下的最优值. w(i,j)表示从i到j的代价. 例如在合并石子中: m(i,j)表示从第i堆石 ...
- 如何激活Windows10系统
Win10正式企业版系统的激活方法: 按住 win+x 就会出现如下,右击桌面的左下角的“Windows”图标,从其右键菜单中选择“命令提示符(管理员)”项,以便打开 MSDOS界面. 待打开MS ...
- TCP/IP详解学习笔记(3)-IP协议,ARP协议,RARP协议【转】
转自:http://blog.csdn.net/goodboy1881/article/details/668556 把这三个协议放到一起学习是因为这三个协议处于同一层(网际层),ARP协议用来找到目 ...
- vue组件父子组件传递引用类型数据
今天在写分页功能时,发现父子组件传值时,子组件监听不到父组件中数据的变化,传递的是一个引用类型的数据 其原因是引用类型共用一个内存地址,父子组件用的是同一个对象,故子组件监听不到变化,此时就需要做一个 ...