#902. 最短路计数
最短路计数
题目描述
给出一个 N 个顶点 M 条边的无向无权图,顶点编号为 1~N。问从顶点 1 开始,到其他每个点的最短路有几条。
输入格式
第一行包含 2 个正整数 N,M,为图的顶点数与边数。 接下来 M 行,每行 2 个正整数 x,y,表示有一条连接顶点 x 和顶点 y 的边,请注意可能有自环与重边。
输出格式
共 N 行,每行一个非负整数,第 i 行输出从顶点 1 到顶点 i 有多少条不同的最短路,由于答案有可能会很大,你只需要输出 ansmod100003 后的结果即可。如果无法到达顶点 i 则输出 0。
样例
输入样例 1
5 7
1 2
1 3
2 4
3 4
2 3
4 5
4 5
输出样例 1
1
1
1
2
4
输入样例 2
2 3
1 2
1 2
1 2
输出样例 2
1
3
输入样例 3
5 6
1 2
1 3
2 4
3 4
4 5
2 3
输出样例 3
1
1
1
2
2
输入样例 4
3 3
1 1
1 2
2 3
输出样例 4
1
1
1
输入样例 5
6 8
1 2
1 3
2 4
2 5
3 4
3 5
4 6
5 6
输出样例 5
1
1
1
2
2
4
提示
数据规模:1≤N≤10^6,1≤M≤2×10^6。
样例分析:1 到 5 的最短路有 4 条,分别为 2 条 1→2→4→5 和 2 条 1→3→4→5(由于 4→5 的边有 2 条)。
思路:单源最短路的计数 应用 Dijkstra 算法: 无向图,每经过一条边路径长度+1; 更新(松弛)邻接点 y 距离的时候如果(dist[y] > dist[x]+1),计数覆盖,相等的话(即有相同最短路径)就计数相加;