#icpc2014summerday4i. [icpc2014summer_day4_i]首都

[icpc2014summer_day4_i]首都

题目描述

给定一个没有环的有向连通图。首先,我们需要选择一个顶点作为首都 ss

定义函数 T(v)T(v) 为“使从顶点 vv 可达所有点所需的最小‘反转边’操作次数”。

其中,“反转边”指的是删除由顶点 vvuu 的有向边 (v,u)(v,u),并将其重新连接为 (u,v)(u,v)

顶点 ss 是首都,当且仅当对于任意顶点 vv,都满足 T(s)T(v)T(s) \leq T(v)

请列举所有符合首都条件的顶点作为答案。


输入

输入以以下格式给出,共 M+1M+1 行。

NN MM
a_1a\_1 b_1b\_1
:
:
a_Ma\_M b_Mb\_M

  • 第一行包含两个整数 NNMM,表示给定图有 NN 个顶点和 MM 条边。
  • 接下来的 MM 行,每行包含两个整数 a_ia\_ib_ib\_i,表示存在一条由 a_ia\_ib_ib\_i 的有向边。

约束条件

  • 1N10,0001 \leq N \leq 10{,}000
  • 0M100,0000 \leq M \leq 100{,}000
  • 0a_iN10 \leq a\_i \leq N-1
  • 0b_iN10 \leq b\_i \leq N-1
  • a_ib_ia\_i \neq b\_i
  • 对于所有 iji \neq j(a_i,b_i)(a_j,b_j)(a\_i, b\_i) \neq (a\_j, b\_j)
  • 给定图是连通的且没有环。
  • 给定图中入度为0的顶点个数不超过50。

输出

以以下格式输出答案,共两行。

cnumcnum costcost
c_1c\_1 c_2c\_2 ... c_cnumc\_{cnum}

  • 第一行,由两个整数 cnumcnumcostcost 组成,以空格分隔。
  • 第二行,输出 cnumcnum 个整数 c_ic\_i,以空格分隔。它们按照顺序列出满足首都条件的顶点编号。

示例输入 1

3 2
0 1
2 1```

### 示例输出 1

```plain
2 1
0 2```

*   如果选择顶点0作为首都,则将边(2,1)反转,可以得到一个包含边(0,1)和(1,2)的图,所以答案是1。
*   $T(0)=1$,$T(1)=2$,$T(2)=1$。

---

### 示例输入 2

```plain
5 4
0 1
2 1
2 3
4 3```

### 示例输出 2

```plain
3 2
0 2 4```

---

### 示例输入 3

```plain
5 5
0 1
1 2
3 2
3 4
4 1```

### 示例输出 3

```plain
2 1
0 3```