loj#P3927. 「COCI 2023.1」Skrivača

「COCI 2023.1」Skrivača

题目描述

译自 COCI 2022/2023 Contest #3 T5「Skrivača

Marin 和 Luka 正在家中玩捉迷藏(Skrivača)。家里共有 nn 个房间,有 mm 对放假通过一扇门连接起来。房间编号为 11nn,并且对于每个房间,都存在一条从一个房间到另一个房间的路径。

Luka 想到了一个藏身方案:当 Marin 进入房间 vv 时,Luka 会躲在房间 ava_v。在开始时 Marin 选择他开始的房间 v0v_0,然后 Luka 躲在房间 av0a_{v_0}。对于游戏中的每一轮,首先 Marin 选择一个与目前所处的房间相邻的房间 uu 并进入。在这之后,Luka 知道 Marin 在房间 uu,所以根据藏身方案,他会藏在房间 aua_u。注意 Luka 可以选择任意路径到达 aua_u,在这一轮中他可以经过任意数量的房间。

当 Marin 和 Luka 位于同一房间时,Marin 就会发现 Luka,在那一时刻游戏结束。

Marin 发现了 Luka 的藏身策略,所以他希望你能确定对于每个开始房间,Marin 是否可以在有限轮中找到 Luka,并且如果他可以,确定当双方均以最佳策略(Marin 按照他尽可能在最少轮数找到 Luka 的目标进行游戏,Luka 按照他尽可能在最多轮数被 Marin 发现的目标进行游戏)进行游戏时 Marin 找到 Luka 的最小轮数。

输入格式

第一行两个整数 $n,m\ (1\le n\le 2\cdot 10^5,n-1\le m\le \min(5\cdot 10^5,\frac{n\cdot (n-1)}{2}))$,表示房间数和门数。

第二行 nn 个整数 ai (1ain)a_i\ (1\le a_i\le n),表示 Luka 的藏身策略。

接下来 mm 行,每行两个整数 xi,yi (1xi,yin,xiyi)x_i,y_i\ (1\le x_i,y_i\le n,x_i\neq y_i),表示房间 xix_iyiy_i 之间有一扇门相连。在任意一对房间之间最多只有一扇门。

输出格式

输出一行 nn 个整数,第 ii 个整数表示 Marin 在房间 ii 开始游戏时找到 Luka 所需的最小轮数。如果 Marin 找不到 Luka,输出 1-1

4 4
3 4 1 2
1 2
2 3
3 4
4 1

-1 -1 -1 -1

8 9
2 3 2 1 6 5 6 7
1 2
1 3
2 4
3 4
4 5
4 6
6 7
5 7
4 8

1 2 2 2 1 1 1 1

9 8
1 9 1 1 1 9 9 9 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9

0 1 1 2 1 1 2 1 1

数据范围与提示

详细子任务附加限制及分值如下表所示。

子任务编号 附加限制 分值
11 n1 000,m2 000n\le 1\ 000,m\le 2\ 000 1414
22 m=n1m=n-1 2323
33 Luka 的藏身策略是,他永远不会试图藏在 Marin 目前所处房间或与其相邻的房间,并且房子的结构是,游戏最多可以在 55 个不同的房间结束,与 Luka 的藏身策略无关。 2727
44 无附加限制 3636