题目链接:How Many Shortest Paths
题目描述:给定一个包含n个节点的有向图,通过一个n*n的矩阵来表示。矩阵中的a[i][j]值为-1表示从节点i到节点j无直接路径;否则,该值表示从i到j的路径长度。输入起点vs和终点vt,计算从vs到vt的所有不共享任何边的最短路径数量。如果起点和终点相同,则输出无穷大。
解题思路:首先使用Floyd算法计算任意两点之间的最短路径距离。然后构建一个新的图,其中只有满足条件的边(即dis[vs][i] + a[i][j] + dis[j][vt] == dis[vs][vt])才会被加入新图中,边的权重设为1以确保每条边仅能被使用一次。最后利用Dinic算法计算最大流,从而得到从vs到vt的不共享边的最短路径数量。
#pragma comment(linker, "/STACK:1024000000,1024000000")#include <>
#include <>
#include <>
#include <>
#include <>
#include <>
#include <>
#include <>
#include <>
#include <>
#include <>
#include <>
#include <
查看代码