将问题建模为带权图最短路:
由于边权只为 0 或 1,使用 0-1 BFS:
在一片神奇的魔法森林中,有 n 个魔法节点,每个节点都有一个传送门。第 i 个节点的传送门会把你传送到 ai 号节点。
多多每次可以选择坐传送门从 i 节点传送到 ai 节点,或者选择步行到相邻的节点 i−1 或 i+1 节点。
当然多多是个喜欢偷懒的人,所以它能坐传送门就尽量不步行。
现在多多从 1 号节点出发,想知道到达每个节点需要经过的最少步行次数。
输入两行,第一行包含一个数字 n(1<=n<=100000) ,表示有 n 个节点。
接下来一行 n 个数字,每个数字 ai(1<=ai<=n) ,表示 i 节点的传送门可以传送到 ai 节点,注意 ai 可能等于 i
输出一行包含 n 个数字,第 i 个数字 ansi ,表示从 1 号节点到 i 号节点的最少步行次数
输入
3
1 2 3
输出
0 1 2
输入
4
4 2 3 1
输出
0 1 1 0