bzoj#P4478. [Jsoi2013] 侦探jyy

[Jsoi2013] 侦探jyy

题目描述

JSOI 的世界里一共有 N 个不同的事件( 依次由 1 到 N 编号),以及 M 条线索。 每一条线索对应一个二元组(x,y),表示事件 x 发生会导致事件 y 发生——注 意: 线索是单向的,也就是如果 y 发生了,并不代表 x 一定会发生。 线索是有传递性的, 即如果存在线索(x,y)以及(y,z), 那么 x 发生则会导致 z 发生。 同时由于世界是合理的,任意一个事件 x 一定不会通过某些线索导致事件 x 本身发生。 另外,整个世界仅包含这 M 条线索, 我们不认为一些事件会凭空发生(就 像福尔摩斯永远不会认为诡异的凶杀案是源于神的谴责)。具体而言: 对于某 个事件 x, 如果 x 发生了,并且存在某个事件可能导致 x 发生,那么一定至少有 一个可能导致 x 发生的事件发生了。 现在已知世界上的 M 条线索,以及 D 个已经发生的事件,那么由此推断, 哪些事件一定已经发生了呢?

输入格式

第一行包含用空格隔开的三个整数,分别为 N, M 和 D。 接下来 M 行,每行两个整数 x, y 表示线索(x,y), 满足 1 < = x, y < = N。 接下来 D 行为 D 个 1 到 N 之间不同的整数, 表示已知的已经发生的事件。 1 < = D < = N < = 1000, 1 < = M < = 100000

输出格式

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

3 2 1
1 3
2 3
3

3
在第一个样例中,由于事件 1 和事件 2 这两个事件中的任何一个发生都会导
致事件 3 发生,所以我们并不能确定到底哪个事件发生了。
在第二个样例中,由于事件 4 发生了,所以事件 2 和事件 3 中至少有一个发
生了。而不论哪一个发生了,都可以推出事件 1 发生了。最终由于事件 1 发生了,
使得我们可以推断出,所有 4 个事件都必然发生了。

提示

没有写明提示

题目来源

By 佚名上传