bzoj2259
这道题很不错,首先读入方式有一种跳跃的既视感:
读入Si之后,我们可以直接往后跳Si,可以想到最短路,设序列为a[],我们设n+1是终点
如果i+a[i]<=n+1 那么i-->i+a[i] 权值为0 否则i-->n+1 权值为i+a[i]-n
注意这可以算是一种非常经典的区间建图的方法
下面我们解决调整某个数,我们比划一下就知道,在相邻两点连一条权值为1的无向边即可
然后我们可以跑最短路了
但是看到n<=1000000是不是感觉dij+heap有点虚?实际上对这个图我们直接宽搜就好了
为什么?仔细研究发现,大部分边权值不是1就是0,只有一些点到终点的权值是不和谐的
但这有什么关系呢?我们到快到终点的那个点直接计算比较取最优即可
const inf=; var q,f,d:array[..] of longint;
ans,n,i,h,r:longint; function min(a,b:longint):longint;
begin
if a>b then exit(b) else exit(a);
end; procedure add(x,w:longint);
begin
if (x<) or (x>n+) then exit;
while d[x]>inf do
begin
d[x]:=w;
inc(r);
q[r]:=x;
if f[x]>n then
begin
ans:=min(ans,f[x]-n-+d[x]);
exit;
end;
x:=f[x];
end;
end; procedure work;
var x:longint;
begin
if f[]>n then
begin
ans:=f[]-n-;
exit;
end;
h:=;
add(f[],);
while (h<=r) and (d[n+]>inf) do
begin
x:=q[h];
add(x-,d[x]+);
add(x+,d[x]+);
inc(h);
end;
end; begin
readln(n);
for i:= to n do
begin
read(f[i]);
f[i]:=f[i]+i+;
end;
ans:=inf;
fillchar(d,sizeof(d),);
work;
ans:=min(ans,d[n+]);
writeln(ans);
end.
bzoj2259的更多相关文章
- 【BZOJ2259】[Oibh]新型计算机 最短路
[BZOJ2259][Oibh]新型计算机 Description Tim正在摆弄着他设计的“计算机”,他认为这台计算机原理很独特,因此利用它可以解决许多难题. 但是,有一个难题他却解决不了,是这台计 ...
- [bzoj2259][Oibh]新型计算机_Dijkstra
新型计算机 bzoj-2259 Oibh 题目大意:给定一个n个数的数列,第i个数为a[i],更改第i个数至x的代价为|x-a[i]|.求最小代价,使得:读入一个数s1后,向后连着读s1个数,然后如s ...
- BZOJ2259 [Oibh]新型计算机
话说hzwer你在坑爹?... 我按照你的建图交了上去,发现WA. 开始检查= =...过了好久,突然觉得画风不对...hzwer您建图错了啊!!! 后来看了看zky的终于知道了怎么回事>_&l ...
- BZOJ2259 [Oibh]新型计算机 【傻逼最短路】
Description Tim正在摆弄着他设计的"计算机",他认为这台计算机原理很独特,因此利用它可以解决许多难题. 但是,有一个难题他却解决不了,是这台计算机的输入问题.新型计算 ...
- 【bzoj2259】[Oibh]新型计算机 堆优化Dijkstra
题目描述 Tim正在摆弄着他设计的“计算机”,他认为这台计算机原理很独特,因此利用它可以解决许多难题. 但是,有一个难题他却解决不了,是这台计算机的输入问题.新型计算机的输入也很独特,假设输入序列中有 ...
- [转载]hzwer的bzoj题单
counter: 664BZOJ1601 BZOJ1003 BZOJ1002 BZOJ1192 BZOJ1303 BZOJ1270 BZOJ3039 BZOJ1191 BZOJ1059 BZOJ120 ...
- BZOJ刷题列表【转载于hzwer】
沿着黄学长的步伐~~ 红色为已刷,黑色为未刷,看我多久能搞完吧... Update on 7.26 :之前咕了好久...(足见博主的flag是多么emmm......)这几天开始会抽时间刷的,每天几道 ...
随机推荐
- Android基础之Activity
一.什么是Activity Activity是Android四大组件之一,并且Activity是组件中的重中之重. Activity是为用户提供一个用于信息交互的窗口. 二.如何去创建Activity ...
- dorado抽取js
dorado创建的视图文件如果有控件拥有事件的话,那么它是可以抽取js的, 右键视图->抽取JavaScript 然后就会出现一个同名的.js文件 (注意,所有的属性需要有id,因为js需要绑定 ...
- 2017 google Round C APAC Test 题解
题解参考网上的答案,以及我自己的想法. 主要参考网站:http://codeforces.com/blog/entry/47181,http://codeforces.com/blog/entry/4 ...
- 调起MT096的配置过程
FTP::cips\/var/cics_regions/RGCIPS/database/PD/PD.RGCIPS|PD.auto 更加新的PD号(其中的路径指向新的程序ibmp),并修改FTP::ci ...
- java中instanceof和getClass()的作用
初学者难免有点混淆java中instanceof和getClass()的作用, 下面就来一一讲解. 父类A: class A { } 子类B: class B extends A { } 构造对象 ...
- React:用于搭建UI的JavaScript库
React https://facebook.github.io/react/index.html 2016-08-03 先吐槽一下.看过很多博客.教程.文章,一直想不通为什么大牛们介绍一种新技术一上 ...
- RX学习笔记:JavaScript数组操作
RX学习笔记:JavaScript数组操作 2016-07-03 增删元素 unshift() 在数组开关添加元素 array.unshift("value"); array.un ...
- python--threading多线程总结
threading用于提供线程相关的操作,线程是应用程序中工作的最小单元.python当前版本的多线程库没有实现优先级.线程组,线程也不能被停止.暂停.恢复.中断. threading模块提供的类: ...
- 用twisted 做一个日志收集系统
混沌初开 起初我是不会上logging模块的,直接导致了即时有了日志,我也存到了数据库中,而且量也不大,是否能遇到异常只能靠运气了 开天辟地 不得不说,没有任何输出的线上环境真的挺难调试的,当然,聪明 ...
- 【WPF】路由事件
总结WPF中的路由事件,我将学到的内容分为四部分来逐渐掌握 第一部分:wpf中内置的路由事件 以Button的Click事件来说明内置路由事件的使用 XAML代码: <Window x:Clas ...