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 翻译