CF1765H Hospital Queue

题目描述

有 $n$ 个人(编号从 $1$ 到 $n$)预约了医生的门诊。医生需要决定这些人就诊的顺序。第 $i$ 个病人必须在前 $p_i$ 个就诊的人中被安排。此外,还有 $m$ 条限制条件:第 $i$ 条限制由两个整数 $(a_i, b_i)$ 表示,意思是编号为 $a_i$ 的病人必须比编号为 $b_i$ 的病人更早就诊。 例如,如果 $n = 4$,$p = [2, 3, 2, 4]$,$m = 1$,$a = [3]$,$b = [1]$,那么唯一不违反限制条件的就诊顺序是 $[3, 1, 2, 4]$。如果 $n = 3$,$p = [3, 3, 3]$,$m = 0$,$a = []$,$b = []$,那么任何就诊顺序都是合法的。 对于每个病人,计算在所有不违反限制条件的就诊顺序中,他可能被安排的最靠前的位置。

输入格式

第一行包含两个整数 $n$ 和 $m$($1 \le n \le 2000$;$0 \le m \le 2000$)。 第二行包含 $n$ 个整数 $p_1, p_2, \dots, p_n$($1 \le p_i \le n$)。 接下来 $m$ 行,每行包含两个整数 $a_i$ 和 $b_i$($1 \le a_i, b_i \le n$;$a_i \ne b_i$)。所有的 $(a_i, b_i)$ 对都是不同的(即如果 $i \ne j$,则 $a_i \ne a_j$,$b_i \ne b_j$,或两者都不同)。 输入保证至少存在一种合法的就诊顺序。

输出格式

输出 $n$ 个整数,第 $i$ 个整数表示在所有合法的就诊顺序中,第 $i$ 个病人可能被安排的最靠前的位置。位置编号从 $1$ 到 $n$。

说明/提示

在第一个样例中,$[3, 1, 2, 4]$ 是唯一合法的顺序,因此每个病人的最小位置就是他们在该顺序中的位置。 在第二个样例中,任何顺序都是合法的,因此每个病人都可以被安排在第一个。 在第三个样例中,有三种合法顺序:$[4, 2, 3, 1, 5]$,$[3, 4, 2, 1, 5]$ 和 $[4, 3, 2, 1, 5]$。 由 ChatGPT 4.1 翻译