题目名称 2381. 迈克和捷径们
输入输出 CF_RD_361_B.in/out
难度等级 ★☆
时间限制 3000 ms (3 s)
内存限制 256 MiB
测试数据 3
题目来源 GravatarMealy 于2016-07-09加入
开放分组 全部用户
提交状态
分类标签
搜索法
分享题解
通过:5, 提交:6, 通过率:83.33%
GravatarMealy 100 0.097 s 8.32 MiB C++
Gravatarkxxy 100 0.221 s 1.84 MiB C++
GravatarZXCVBNM_1 100 0.250 s 11.00 MiB C++
GravatarOstmbh 100 0.839 s 1.23 MiB C++
Gravatarfmj 100 0.861 s 1.84 MiB C++
GravatarOstmbh 0 3.433 s 2.60 MiB C++
关于 迈克和捷径们 的近10条评论(全部评论)
。。都不懂题了快
Gravatarkxxy
2016-07-18 14:21 2楼
欲哭无泪
SPFA被坑成SB
结果自己手推O(3*n)居然AC
.......一颗赛艇
GravatarOstmbh
2016-07-14 18:08 1楼

2381. 迈克和捷径们

★☆   输入文件:CF_RD_361_B.in   输出文件:CF_RD_361_B.out   简单对比
时间限制:3 s   内存限制:256 MiB

【题目描述】

最近迈克忙着考前复习,他希望通过出门浮躁来冷静一下。

迈克所在的城市包含N个可以浮躁的地方,分别编号为1..N。通常迈克在家也很浮躁,所以

说他家属于可以浮躁的地方并且编号为1.迈克从家出发,去一些可以浮躁的地方。迈克从第i个可以浮躁的地方到第j个可以浮躁的地方需要消耗abs(i-j)点精力。迈克花费的精力点数是这样算的,比如他去一组地方p1=1,p2,...,pk就需要点精力。

当然,如果木有捷径的话走路会很无聊。无论两个地方相隔多远,走捷径的话迈克都只需要消耗1点精力。迈克所在的城市里由N条捷径。第i条捷径表示这条捷径连接了第i处和第ai(i<=ai<=ai+1)处(这条捷径是单向的)。所以说其实每个可以浮躁的地方i都有一条捷径从这开始,到达api处。如果迈克选择了这样一组地方p1=1,p2,...,pk,其中1<=i<k满足api=pi+1,迈克就只需要花费1点精力而不是

abs(p[i]-p[i+1])就可以从pi走到pi+1了。再比如迈克选择了这样一个序列去浮躁

p1=1,p2=ap1,p3=ap2,...,pk=apk-1,那么只需要k-1点精力就可以从p1走到pk了。因为迈克忙着码代码,所以说他拜托你帮他求出来从家到每个可以浮躁的地方需要耗费的精力点数.

【输入格式】

第1行:一个整数N(1<=N<=200 000)表示迈克所在的城市包含N个可以浮躁的地方(即N条捷径)

第2行:N个整数a1,...,aN(i<=ai<=N,用来表示第i个地方有到第ai个地方的捷径(捷径都是单向的)

【输出格式】

第1行:N个整数m1,m2,...,mN表示迈克从家里到第i个地方所需要花费的精力点数。

【样例们】

输入:

3

2 2 3

输出:

0 1 2

==============

输入:

5

1 2 3 4 5

输出:

0 1 2 3 4

==========

输入:

7

4 4 4 4 7 7 7

输出:

0 1 2 1 2 3 3



【来源】

Codeforces Round #361 TB div2