P14883 [ICPC 2019 Yokohama R] One-Way Conveyors

题目描述

你在一家生产许多不同产品的工厂工作。产品需要在若干不同的机床上进行加工。这些机床所在的车间通过传送带连接,以交换未完成的产品。每个未完成的产品通过一条或多条这样的传送带从一个车间转移到另一个车间。 由于不同类型的产品所需的加工顺序不同,目前传送带是双向运行的。这可能导致效率低下,因为传送带在切换方向前必须完全清空。这里可能存在**改善**(效率提升)的空间! 增加更多传送带的成本太高。如果所有必需的转移都能在当前安装的传送带以固定方向运行时实现,则不需要额外成本。所有必需的转移(从哪个车间到哪个车间)都已列出在手。你想知道是否所有必需的转移都能在所有传送带单向运行时实现,如果可以,请给出实现该目标的传送带方向。

输入格式

输入包含单个测试用例,格式如下。 $$ \begin{aligned} &n \ m \\ &x_1 \ y_1 \\ &\vdots \\ &x_m \ y_m \\ &k \\ &a_1 \ b_1 \\ &\vdots \\ &a_k \ b_k \end{aligned} $$ 第一行包含两个整数 $n$ ($2 \le n \le 10000$)和 $m$ ($1 \le m \le 100000$),分别表示车间的数量和传送带的数量。车间编号为 $1$ 到 $n$。接下来的 $m$ 行中,每行包含两个整数 $x_i$ 和 $y_i$ ($1 \le x_i < y_i \le n$),表示第 $i$ 条传送带连接车间 $x_i$ 和 $y_i$。任意两个车间之间最多安装一条传送带。保证任意两个车间通过一条或多条传送带相连。下一行包含一个整数 $k$ ($1 \le k \le 100000$),表示从一个车间到另一个车间所需的转移数量。接下来的 $k$ 行中,每行包含两个整数 $a_i$ 和 $b_i$ ($1 \le a_i \le n$,$1 \le b_i \le n$,$a_i \ne b_i$),表示需要从车间 $a_i$ 到车间 $b_i$ 的转移。对于 $i \ne j$,满足 $a_i \ne a_j$ 或 $b_i \ne b_j$。

输出格式

如果当所有传送带单向运行时,不可能实现所有必需的转移,则输出 “No”。否则,先在一行输出 “Yes”,随后是 $m$ 行,每行描述一条传送带的方向。所有必需的转移必须能在传送带按这些方向运行时实现。每条方向应描述为两个车间编号,中间用一个空格分隔,起点车间编号在左,终点车间编号在右。只要所有传送带都被指定且没有重复或遗漏,这 $m$ 行的顺序无关紧要。如果有多个可行的方向分配方案,输出任意一个均可。