题意迷之简短。大意就是:一个城市i到另一个城市j的权值是|i-j|,同时,对于每个城市i存在一条捷径花费1权值从i到a[i]。求从第一城市开始到所有其余城市的最小权值。
还能说什么?bfs就好。
#coding gbk
#!usr/bin/env
n = int(input())
a = [0] + [n for i in range(n)]
e = [[i + 1, i - 1] if i < n else [i - 1] for i in range(0, n + 1)]
e[0] = []
a[1] = 0
for i, x in enumerate(map(int, input().split())):
if i + 1 != x: e[i + 1] += [x]
q = [(0, 1)]
while q:
l, cur = q.pop(0)
for x in e[cur]:
if l + 1 < a[x]:
a[x] = l + 1
q.append((l + 1, x))
print(*a[1:])
评论