#abc239g. [abc239_g]Builder Takahashi

[abc239_g]Builder Takahashi

题目描述

我们有一个简单的连通无向图,有 NN 个顶点和 MM 条边。
顶点编号为 1122、……、NN
边编号为 1122、……、MM。第 ii 条边双向连接了顶点 aia_i 和顶点 bib_i。没有直接连接顶点 11 和顶点 NN 的边。
每个顶点要么为空,要么被一面墙占据。初始时,每个顶点都为空。

Aoki 打算沿着图上的边从顶点 11 出发,前往顶点 NN。但是,Aoki 不允许移动到被墙占据的顶点。

Takahashi 决定在某些顶点上建墙,以便无论 Aoki 选择哪条路线,都无法到达顶点 NN
在顶点 ii 上建墙将花费 Takahashi cic_i 日元(日本的货币单位)。 他不能在顶点 11 和顶点 NN 上建墙

Takahashi 需要多少日元才能建造这些墙以满足条件?并且,输出建造墙的最小代价方式。

约束条件

  • 3N1003 \leq N \leq 100
  • N1MN(N1)21N - 1 \leq M \leq \frac{N(N-1)}{2} - 1
  • 1ai<biN1 \leq a_i < b_i \leq N (1iM)(1 \leq i \leq M)
  • (ai,bi)(1,N)(a_i, b_i) \neq (1, N)
  • 给定的图是简单的和连通的。
  • 1ci1091 \leq c_{i} \leq 10^9 (2iN1)(2 \leq i \leq N-1)
  • c1=cN=0c_1 = c_N = 0
  • 输入中的所有值都是整数。

输入

输入以以下格式从标准输入读取:

NN MM a1a_1 b1b_1 a2a_2 b2b_2 \vdots aMa_M bMb_M c1c_1 c2c_2 \dots cNc_N

输出

以以下格式输出。其中,C,kC,kpip_i 定义如下。

  • CC 是 Takahashi 需要支付的代价
  • kk 是 Takahashi 需要在哪些顶点上建墙
  • (p1,p2,,pk)(p_1,p_2,\dots,p_k) 是 Takahashi 将在哪些顶点上建墙的序列

CC kk p1p_1 p2p_2 \dots pkp_k

如果有多种建造墙的方式能满足最小代价的条件,则输出其中任意一种即可。


示例输入 1

5 5
1 2
2 3
3 5
2 4
4 5
0 8 3 4 0

示例输出 1

7
2
3 4

如果 Takahashi 在顶点 33 和顶点 44 上建墙,支付 3+4=73 + 4 = 7 日元,则 Aoki 无法从顶点 11 到达顶点 55
没有比这更低的代价满足条件,所以答案是 77 日元。


示例输入 2

3 2
1 2
2 3
0 1 0

示例输出 2

1
1
2

示例输入 3

5 9
1 2
1 3
1 4
2 3
2 4
2 5
3 4
3 5
4 5
0 1000000000 1000000000 1000000000 0

示例输出 3

3000000000
3
2 3 4