最短路径树
时间限制: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