#P7154. 课程安排(Plan of Lectures)

0

课程安排(Plan of Lectures)

课程安排(Plan of Lectures)

题目描述

Ivan 是编程老师,一学年要讲 nn 节不同主题的课。每节课恰好讲一个主题、每个主题恰好讲一次。他需要安排第 1,2,…,n1,2,\dots,n 节课分别讲哪个主题,即给出一个 1∼n1\sim n 的排列 qq,其中 qiq_i 表示第 ii 节课讲的主题编号。

除恰好一个主题外,每个主题 ii 都有先修主题 pip_i(pi=0p_i=0 表示无先修)。主题必须在其先修主题之后才能讲。题目保证至少存在一种满足先修约束的安排。

此外有 kk 个"特殊主题对" (xi,yi)(x_i, y_i):若 yiy_i 紧接在 xix_i 之后讲(即存在 jj 使 qj=xiq_j=x_i 且 qj+1=yiq_{j+1}=y_i),学生理解更好,要求这 kk 个特殊对全部满足。

问是否存在满足所有约束的安排;若存在,输出任意一个合法排列。

输入格式

第一行两个整数 n,k (2≤n≤3⋅105, 1≤k≤n−1)n, k\ (2\le n\le 3\cdot 10^5,\ 1\le k\le n-1)。 第二行 nn 个整数 p1,…,pn (0≤pi≤n)p_1,\dots,p_n\ (0\le p_i\le n),pip_i 是 ii 的先修主题(00 表示无)。恰好有一个为 00,且至少存在一种合法先修顺序。 接下来 kk 行,每行 xi,yi (1≤xi,yi≤n, xi≠yi)x_i, y_i\ (1\le x_i,y_i\le n,\ x_i\ne y_i) — 特殊对。所有 xix_i 互不相同,所有 yiy_i 互不相同。

输出格式

若不存在合法安排,输出 0;否则输出 nn 个互不相同的整数 q1,…,qn (1≤qi≤n)q_1,\dots,q_n\ (1\le q_i\le n) — 任意一个合法排列。

样例输入 #1

5 2
2 3 0 5 3
1 5
5 4

样例输出 #1

3 2 1 5 4

样例输入 #2

5 2
2 3 0 5 3
1 5
5 1

样例输出 #2

0

样例输入 #3

5 1
2 3 0 5 3
4 5

样例输出 #3

0

样例输入 #4

5 4
2 3 0 5 3
2 1
3 5
5 2
1 4

样例输出 #4

3 5 2 1 4

数据范围

2≤n≤3⋅1052\le n\le 3\cdot 10^5;1≤k≤n−11\le k\le n-1。

知识点与难度

本题涉及的知识点从属于 GESP 七级,难度等级:⭐⭐⭐


测试点分布

Subtask 分值 测试点编号 说明
0 10 1~4 样例(输出 3 2 1 5 4 / 0 / 0 / 3 5 2 1 4)
1 20 5~10 小规模随机 n≤10n\le 10
2 15 11~13 Hack:n=2n=2 合法链 / 特殊对成环 / 祖先违规
3 30 14~22 中等规模随机 n≤1000n\le 1000
4 25 23~25 随机回归,n≤3⋅105n\le 3\cdot 10^5 压力