给定一张有边权(边权全为正)的无向图, n 个点 m 条边,给定起点 S 和终点 T ,问有多少对 A 和 B 满足从 S 到 T 的任意最短路一定经过 A 或者 B ,但是不存在某条最短路同时经过 A 和 B 。
解法一
首先是最暴力的解法,枚举任意点对 A 和 B ,然后删掉 A 和 B ,看看最短距离是否会变长,然后查看 dis(S,A)+dis(A,B)+dis(B,T) 是否和 dis(S,T) 相等,其中 dis(X,Y) 表示原图中点 X 到 Y 的最短距离,由此可以判断枚举的 A 和 B 是否是合法的点对。
其中, dis(X,Y) 可以用floyd求解
时间复杂度: O(n3)
期望得分: 30
解法二
首先,虽然题目中给定的是无向图,但是实际上我们可以先从 S 出发求一遍最短路,然后问题变成了:“在有向无环图上,求有多少个满足条件的点对 A,B ,满足从 S 到 T 的所有路径一定经过 A,B 其中一点,并且不存在路径同时经过 A,B ”。
求解这到题目的一个关键点在于: 满足条件的点对 A,B 具有特点:从 S 到 A 的方案数 × 从 A 到 T 的方案数 + 从 S 到 B 的方案数 × 从 B 到 T 的方案数 = 从 S 到 T 的方案数。
所以在有向无环图上用动态规划求解路径条数,再去掉 A 可以到达 B 或 B 可以到达 A 的情况即可求解这到题目。
PS:方案数可能会爆掉怎么办?可以对方案数求余一个大整数,如果觉得不够的话可以求余两个大整数。
时间复杂度: O(n2+n∗m)
期望得分: 60
解法三
在解法二中,定义 F(X)= 从 S 到 X 的方案数 × 从 X 到 T 的方案数 = 从 S 经过 X 到达 T 的方案数,所以满足条件的点对 A,B 为: