P9760 [COCI 2022/2023 #3] Skrivača

题目描述

Marin 和 Luka 正在他们的房子里玩一个流行的儿童游戏——捉迷藏。这个房子共有 $n$ 个房间,有 $m$ 对房间通过一扇门连接。房间从 $1$ 到 $n$ 编号,并且任意两个房间之间是存在道路相连通的。 Luka 想出了一个躲藏策略:当 Marin 进入房间 $v$ 时,Luka 会躲在房间 $a_v$ 里。在游戏的开始 Marin 选择他开始找人的房间 $v_0$,Luka 躲在房间 $a_{v_0}$里。在游戏的每一个回合,首先由 Marin 选择一个与当前相邻房间 $u$ 并进入。随后 Luka 知道 Marin 在房间 $u$ 中所以参照他的躲藏方式他会躲到房间 $a_u$ 中。注意到 Luka 可以选择任何抵达房间 $a_u$ 的路线并且在游戏的一个回合中他可以经过任意数量的房间。 定义 Marin 找到了 Luka 为当他们两个都在同一个房间中的时候,这时游戏结束。 Marin 发现了 Luka 的躲藏策略,所以她想要你考虑从每一个房间出发时,她是否可以在有限回合找到 Luka。如果可以,计算在理想状态下(Marin 尽可能减少回合数,Luka 尽可能增加回合数)最少需要的回合数。

输入格式

第一行两个整数 $n,m$,分别表示房间的数量和相连房间的对数。 第二行 $n$ 个整数 $a_i$,表示 Luka 的躲藏策略。 在接下来的 $m$ 行中,每行两个整数 $x_i,y_i$,表示这两个房间是相连的。任意两个房间最多只有一条直接相连的道路。

输出格式

一行 $n$ 个数,表示最少需要的回合数。如果无法在有限步中结束游戏,输出 $-1$。

说明/提示

**【样例解释 #2】** Marin 第一回合从房间 $4$ 进入房间 $8$,第二回合回到房间 $4$。Luka 需要经过房间 $4$ 才能从房间 $7$ 到房间 $1$。所以可以在两个回合找到。 **【数据范围】** | 子任务 | 分值 | 特殊性质 | | :----------: | :----------: | :----------: | | $1$ | $15$ | $n\le 1000,m\le2000$ | | $2$ | $25$ | $m=n-1$ | |$3$ | $30$| Luka 的躲藏策略满足他永远不会躲在与 Marin 当前所在房间相邻或相同的房间,并且房子的结构满足游戏可以在最多有 $5$ 个不同房间独立于 Luka 的躲藏策略之外的情况下结束游戏。 | $4$ | $40$ | 无特殊性质 | 对于 $100\%$ 的数据,满足 $1\leq n \leq 2\times10^5,n-1\le m\le \min(5\times 10^5,\dfrac{n\times (n-1)}{2}), 1\le a_i,x_i,y_i\le n,x_i\neq y_i$。 本题满分 $110$ 分。