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......)这几天开始会抽时间刷的,每天几道 ...
随机推荐
- 02_setter注入
工程截图如下 [HelloWorld.java] package com.HigginCui; public class HelloWorld { private String words; publ ...
- VIM 语法检查
VIM Grammar Check 一.Language Tool Create by Dominique Pellé REFER:LanguageTool wikipedia REFER:Langu ...
- java三线程循环有序打印ABC
迅雷笔试题: 编写一个程序,开启3个线程,这3个线程的ID分别为A.B.C,每个线程将自己的ID在屏幕上打印10遍,要求输出结果必须按ABC的顺序显示:如:ABCABC….依次递推. 解决思路:每个线 ...
- c++中动态尾随内存的技巧和定位new
c 和 c++ 最大的特点就是对内存的自由操作,数据类型,其实都是对内存的一种解释方式.C语言中常用的一个技巧就是尾随数据,网络编程中经常会用到这个特性, 特别是以前写完成端口的时候,这个特性肯定是会 ...
- linux操作系统使用3G网卡
几个月前,opensuse13.2出了,一直手痒痒,一有空装了一个.当时在学校,一直用着校园网,也好久没有使用3G网卡.回家的时候,办了个3G网卡,结果插电脑上没有反应,以前插上去,都会提示创建一个网 ...
- 解决在管理wordpress时权限不足的问题
我的wordpress网站的运行环境是自己手动搭建的lamp环境,在管理wordpress时经常遇到因没有足够的权限而无法执行某些操作.在linux上的权限不足的问题无外乎有两个原因,一个是wordp ...
- [C#]将千分位字符串转换成数字
关键代码: /// <summary> /// 将千分位字符串转换成数字 /// 说明:将诸如"–111,222,333的千分位"转换成-111222333数字 /// ...
- pc telnet 登录 android 系统
前提是:1) 手机已经root,且装有busybox,2) 还装有至少一款terminal(模拟终端)软件,手机连wifi路由器.3) 还要有一些基础常识,比如linux命令,telnet.这里模拟终 ...
- prefix和unprefix
exports._esModule = true; exports.default = { prefix: function prefix(prop){ if (prop[0] === '-'){ v ...
- 关于ASE日志空间示数不正常的解决办法
最近某系统的ASE数据库出现了异常,经过各种努力,终于把数据库正常又起起来了.但是经过检查,发现在查看剩余日志空间的时候(sp_helpsegment 'logsegment'),发现显示出来 ...