5604 - 提高:图论:最短路问题:最短路径树:最短路径树(模板题)

通过次数

18

提交次数

36

时间限制 : 1 秒
内存限制 : 128 MB

在一个n个点m条边的无向图中,且告诉你一个点u, 找出若干条边组成一个子图使u到其他点的最短距离与在原图中的相等,并且使边权和最小,求这个最小值

输入

第一行包含两个数字,n(1 ≤ n ≤ 3·10^5) 和 m(1 ≤ n ≤ 3·10^5),分别表示图中顶点的数量和边的数量。

接下来的 m 行,每行包含三个整数,代表一条边——ui, vi, wi,分别表示由一条边连接的两个顶点的编号和这条边的权重(ui ≠ vi,1 ≤ wi ≤ 10^9)。保证图是连通的,且任意一对顶点之间最多只有一条边。

输入的最后一行包含一个整数 u(1 ≤ u ≤ n)——起始顶点的编号。

输出

在第一行输出树中边的最小总权重。

在第二行输出包含在树中的边的编号,编号之间用空格分隔。边的编号按照它们在输入中出现的顺序从1开始编号。如果有多个解,请结合例子,推测输出规律

样例

输入

3 3
1 2 1
2 3 1
1 3 2
3

输出

2
1 2 

输入

4 4
1 2 1
2 3 1
3 4 1
4 1 2
4

输出

4
2 3 4

提示

注意 在第一个示例中,存在两棵可能的最短路径树:

一棵包含边1–3和2–3(总权重为3); 另一棵包含边1–2和2–3(总权重为2); 例如,一棵包含边1–2和1–3的树不会是以顶点3为根的最短路径树,因为在这棵树中,从顶点3到顶点2的距离等于3,而在原图中这个距离是1。