#1440. 航班延误

航班延误

航班延误

题目描述

目前机场有nn趟被延误航班,编号为11nn。机场只有一条起飞跑道,所有的航班需按某个顺序依次起飞(称这个顺序为起飞序列)。定义一个航班的起飞时间为该航班在起飞序列中的位置,即是第几个起飞的航班。

起飞序列必须满足以下条件:

  • 限制一:编号为ii的航班起飞时间不得超过kik_{i}
  • 限制二:存在一些相对起飞顺序限制(a,b)(a,b),表示航班aa必须在航班bb之前起飞。

有两个问题:

  1. 在考虑两类限制条件的情况下,是否可以计算出一个可行的起飞序列。
  2. 在考虑两类限制条件的情况下,如何求出每个航班在所有可行的起飞序列中的最小起飞时间。

输入格式

第一行包含两个正整数nnmmmm表示限制二的数目。

第二行包含nn个正整数kk

接下来mm行,每行两个正整数aabb,表示一对限制二(a,b)(a,b),其中1a,bn1 \leq a,b \leq n

输出格式

第一行包含nn个整数,表示一个可行的起飞序列,相邻两个整数用空格分隔。输入数据保证至少存在一个可行的起飞序列。如果存在多个可行的方案,输出任意一个即可。

第二行包含nn个整数tt,其中tt表示航班ii可能的最小起飞时间,相邻两个整数用空格分隔。

数据范围与提示

  • 对于30%30\%的数据,满足n10n \leq 10
  • 对于60%60\%的数据,满足n500n \leq 500
  • 对于100%100\%的数据,满足1n2×1031 \leq n \leq 2 \times 10^{3}0m1040 \leq m \leq 10^{4}

样例

5 5
4 5 2 5 4
1 2
3 2
5 1
3 4
3 1
3 5 1 4 2
3 4 1 2 1
5 0
3 3 3 5 5
3 2 1 5 4
1 1 1 4 4
见airport3.in
见airport3.out