5604 - 提高:图论:最短路问题:最短路径树:最短路径树(模板题)
时间限制 : 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。