luogu#P5954. [JSOI2013] 侦探 JYY

[JSOI2013] 侦探 JYY

题目描述

JSOI 的世界里一共有 NN 个不同的事件(依次由 11NN 编号),以及 MM 条线索。每一条线索对应一个二元组 (x,y)(x,y),表示事件 xx 发生会导致事件 yy 发生。

注意: 线索是单向的,也就是如果 yy 发生了,并不代表 xx 一定会发生。

线索是有传递性的, 即如果存在线索 (x,y)(x,y) 以及 (y,z)(y,z), 那么 xx 发生则会导致 zz 发生。

同时由于世界是合理的,任意一个事件 xx 一定不会通过某些线索导致事件 xx 本身发生。

另外,整个世界仅包含这 MM 条线索, 我们不认为一些事件会凭空发生(就像福尔摩斯永远不会认为诡异的凶杀案是源于神的谴责)。具体而言,对于某个事件 xx, 如果 xx 发生了,并且存在某个事件可能导致 xx 发生,那么一定至少有一个可能导致 xx 发生的事件发生了。

现在已知世界上的 MM 条线索,以及 DD 个已经发生的事件,那么由此推断, 哪些事件一定已经发生了呢?

输入格式

第一行包含用空格隔开的三个整数,分别为 NNMMDD

接下来 MM 行,每行两个整数 xxyy 表示线索 (x,y)(x,y), 满足 1x,yN1\leq x,y\leq N

接下来 DD 行为 DD11NN 之间不同的整数, 表示已知的已经发生的事件。

输出格式

包含一行至少 DD 个由空格隔开的严格递增的正整数, 表示根据 MM 条线索以及 DD 个已知事件 JYY 所能推断出的一定发生了的事件。

3 2 1
1 3
2 3
3
3
4 4 1
1 2
1 3
2 4
3 4
4
1 2 3 4

提示

样例解释

在第一个样例中,由于事件 11 和事件 22 这两个事件中的任何一个发生都会导致事件 33 发生,所以我们并不能确定到底哪个事件发生了。

在第二个样例中,由于事件 44 发生了,所以事件 22 和事件 33 中至少有一个发生了。而不论哪一个发生了,都可以推出事件 11 发生了。

最终由于事件 11 发生了,使得我们可以推断出,所有 44 个事件都必然发生了。

数据范围

对于 100%100\% 的数据,1DN103,1M1051\leq D\leq N\leq 10^3,1\leq M\leq 10^5