CF1136D Nastya Is Buying Lunch
题目描述
大课间时,Nastya 来到了学校食堂。学校里有 $n$ 个学生,编号从 $1$ 到 $n$。不幸的是,Nastya 来得很晚,所有学生已经排好队了,也就是说 Nastya 只能站在队伍的最后一位。虽然 Nastya 有点难过,但她并不气馁,因为队伍中的一些学生愿意和其他学生交换位置。
具体来说,存在一些学生对 $(u, v)$,如果编号为 $u$ 的学生正好站在编号为 $v$ 的学生前面,Nastya 可以请求他们交换位置,他们会同意。
Nastya 想让你帮她计算,她最多能向前移动多少个位置。
输入格式
第一行包含两个整数 $n$ 和 $m$($1 \leq n \leq 3 \cdot 10^{5}$,$0 \leq m \leq 5 \cdot 10^{5}$),分别表示队伍中的学生人数和愿意交换位置的学生对数。
第二行包含 $n$ 个整数 $p_1, p_2, \ldots, p_n$,表示队伍从前到后的初始排列($1 \leq p_i \leq n$,$p$ 是 $1$ 到 $n$ 的一个排列)。也就是说,第 $i$ 个位置站着编号为 $p_i$ 的学生。
接下来的 $m$ 行,每行包含两个整数 $u_i, v_i$($1 \leq u_i, v_i \leq n, u_i \neq v_i$),表示如果编号为 $u_i$ 的学生正好站在编号为 $v_i$ 的学生前面,他们愿意交换位置。保证如果 $i \neq j$,则 $(u_i, v_i) \neq (u_j, v_j)$。注意,有可能某些学生对中两人互相都同意交换。
Nastya 是队伍中的最后一位,即编号为 $p_n$ 的学生。
输出格式
输出一个整数,表示 Nastya 最多能向前移动多少个位置。
说明/提示
在第一个样例中,Nastya 只需和队首的学生交换一次位置。
在第二个样例中,最优的交换顺序为:
- 先交换编号为 $1$ 和 $3$ 的学生。
- 再交换编号为 $3$ 和 $2$ 的学生。
- 最后交换编号为 $1$ 和 $2$ 的学生。
队伍变化过程为 $[3, 1, 2]$,然后 $[1, 3, 2]$,再到 $[1, 2, 3]$,最后经过这些操作变为 $[2, 1, 3]$。
由 ChatGPT 4.1 翻译