給定一張有邊權(邊權全爲正)的無向圖, 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 爲: