CF1361A Johnny and Contribution
题目描述
今天 Johnny 想要提升自己的贡献。他的计划是写 $n$ 篇博客。每篇博客覆盖一个主题,但一个主题可以被多篇博客覆盖。此外,有些博客之间存在相互引用。每对有引用关系的博客必须覆盖不同的主题,否则读者会发现这些博客只是为了增加贡献而拆分的。博客集合以及它们之间的双向引用关系被称为博客网络。
共有 $n$ 个不同的主题,编号从 $1$ 到 $n$,按 Johnny 的知识排序。博客网络的结构已经准备好。现在 Johnny 需要按某种顺序写这些博客。他很懒,所以每次写博客前,他会先看已经写好的邻居(即与当前博客有引用关系的博客),然后选择一个最小编号且未被邻居覆盖的主题。显然,这种策略总能让他选出一个主题,因为最多只有 $n-1$ 个邻居。
例如,如果当前博客的已写邻居的主题编号为 $1$、$3$、$1$、$5$ 和 $2$,Johnny 会为当前博客选择主题编号 $4$,因为 $1$、$2$、$3$ 已被邻居覆盖,而 $4$ 没有被覆盖。
作为好朋友的你,已经预测了每篇博客的最佳主题。你能告诉 Johnny 应该按什么顺序写博客,使得他的策略能得到你指定的主题分配吗?
输入格式
第一行包含两个整数 $n$ $(1 \leq n \leq 5 \cdot 10^5)$ 和 $m$ $(0 \leq m \leq 5 \cdot 10^5)$,分别表示博客数量和引用数量。
接下来的 $m$ 行,每行包含两个整数 $a$ 和 $b$($a \neq b$;$1 \leq a, b \leq n$),表示博客 $a$ 和博客 $b$ 之间有引用关系。保证图中没有重边。
最后一行包含 $n$ 个整数 $t_1, t_2, \ldots, t_n$,其中第 $i$ 个数表示第 $i$ 篇博客期望的主题编号($1 \le t_i \le n$)。
输出格式
如果不存在满足条件的解,输出 $-1$。否则,输出 $n$ 个不同的整数 $p_1, p_2, \ldots, p_n$($1 \leq p_i \leq n$),表示 Johnny 写博客的顺序。如果有多种答案,输出任意一种即可。
说明/提示
在第一个样例中,Johnny 先写第 $2$ 篇博客,此时还没有已写邻居,所以它获得第一个主题。接着他写第 $1$ 篇博客,它与已经写好的第 $2$ 篇博客有引用关系,因此获得第二个主题。最后他写第 $3$ 篇博客,它与第 $1$ 和第 $2$ 篇博客都有引用关系,因此获得第三个主题。
第二个样例:不存在满足条件的排列。
第三个样例:Johnny 先写第 $2$ 篇博客,获得主题 $1$。然后写第 $5$ 篇博客,也获得主题 $1$,因为它没有与已写博客 $2$ 有引用关系。接着写第 $1$ 篇博客,它与博客 $2$ 有引用关系,因此获得主题 $2$。然后写第 $3$ 篇博客,它与博客 $2$ 有引用关系,因此获得主题 $2$。最后写第 $4$ 篇博客,它与博客 $5$ 有引用关系,因此获得主题 $2$。
由 ChatGPT 4.1 翻译