/ Vijos / 题库 /

最短路径树

最短路径树

时间限制:1秒  内存限制:256M


【题目描述】

  所谓最短路径树,就是从 \(s\) 出发,沿着树上的边走到任意点 \(i\),那么经过的这些边的权值和就是 \(s\) 到 \(i\) 的最短路径。Dijkstra算法或SPFA算法不仅可计算从起点 \(s\) 到各点的最短路径长度,同时也可得到以 \(s\) 为根的最短路径树。方法是在进行松弛操作时,如果 \(d[i] + c < d[j]\) 时,除了更新 \(d[j]\) 之外,还要设置 \(fa[j]=i\)。这样把 \(fa[j]\) 看成 \(j\) 的父亲指针,则所有点形成了一棵树(因为每个结点都有唯一的前驱)。这样要从起点 \(s\) 出发沿最短路走到任意点,只需要顺着树边走即可。

  现在请你利用最短路径树解下面这个决问题:

  \(n\) 个城市用 \(m\) 条双向公路连接,使任意两个城市都能直接或间接地连通。其中城市编号为 \(1..n\),公路编号为 \(1..m\)。任意个两个城市间的货物运输会选择最短路径,把这 \(n*(n-1)\) 条最短路径的和记为 \(S\)。

  现在你来寻找关键公路 \(r\),公路 \(r\) 必须满足:当 \(r\) 堵塞之后,\(S\) 的值会变大(如果 \(r\) 堵塞后使得城市 \(u\)和 \(v\) 不可达,则 \(S\) 为无穷大)。

【输入格式】

  第 1 行包含两个整数 \(n,m\),接下来的 \(m\) 行,每行用三个整数描述一条公路 \(a,b,len(1≤a,b≤n)\),表示城市 \(a\) 和城市 \(b\) 之间的公路长度为 \(len\),这些公路依次编号为 \(1..m\)。

【输出格式】

  从小到大输出关键公路的编号。

【输入输出样例】

 Input

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

 Output

1
2
3
5

【数据限制】

  对于 \(30\%\) 的数据,\(1≤n≤50\),\(1≤m≤1000\)。
  对于 \(100\%\) 的数据,\(1≤n≤100\),\(1≤m≤3000\),\(1≤len≤10000\)。

【来源】

  Mr.he

信息

ID
2045
难度
9
分类
搜索 | 图结构 | 最短路 点击显示
标签
(无)
递交数
1
已通过
1
通过率
100%
上传者