AT_icpc2014summer_day4_i 首都

题目描述

给定一个无环的连通有向图(所谓连通有向图,指的是当将该图视为无向图时是连通的)。 我们希望从图中选出一个顶点作为首都 $s$。 定义 $T(v)$ 为“从顶点 $v$ 出发,到达所有其他顶点所需的最少‘边的反转’操作次数”。 这里的‘边的反转’指的是,对于顶点 $v,u$,将原本从 $v$ 指向 $u$ 的有向边移除,并重新设置为从 $u$ 指向 $v$。 如果对于任意顶点 $v$,都有 $T(s) \leq T(v)$ 成立,则称顶点 $s$ 为首都。 请列举出所有可能成为首都的顶点。

输入格式

输入包含 $M+1$ 行,格式如下: 第一行:两个整数 $N$ $M$,表示给定的图有 $N$ 个顶点和 $M$ 条边。 接下来的 $M$ 行:每行两个整数 $a_i, b_i$,表示从 $a_i$ 到 $b_i$ 存在一条有向边。 约束条件: $1 \leq N \leq 10,000$ $0 \leq M \leq 100,000$ $0 \leq a_i \leq N-1$ $0 \leq b_i \leq N-1$ $a_i \neq b_i$ 对于不同的 $i, j$,$(a_i, b_i) \neq (a_j, b_j)$ 给定的图是连通的且没有环。 对于给定的图,入度为0的顶点个数不超过50。

输出格式

按照以下格式输出两行: 第一行:两个整数 $cnum$ $cost$,用空格分隔。 第二行:$cnum$ 个整数 $c_i$,用空格分隔。 其中变量含义如下: $cnum$:满足首都性质的顶点数。 $cost$:首都顶点 $v$ 对应的 $T(v)$ 值。 $c_i$:满足首都性质的顶点编号,按升序排列。 示例输入: 3 2 0 1 2 1 示例输出: 2 1 0 2 说明:如果将顶点0设为首都,通过反转边(2,1),可以得到包含边(0,1)和(1,2)的图,因此答案是1。 $T(0)=1$,$T(1)=2$,$T(2)=1$。