#25: 題解


911091@stu.cchs.chc.edu.tw (17莊明達 David)

學校 : 彰化縣精誠中學
編號 : 4
來源 : [111.246.30.44]
最後登入時間 :
2023-06-10 18:41:31
a212. 星際快遞二 | From: [111.246.36.251] | 發表日期 : 2023-04-02 11:45

兩種想法

1. 做兩次最短路

假設要從S走到E

設想一個路徑有通過一個邊 E(X, Y, T),我們可以把花費時間拆成三個部分:
cost(S, E) = cost(S, X) + cost(X, Y) + cost(Y, T) = cost(S, X) + T + cost(Y, T)
如果對此邊使用裝置,那麼意思就是 T=0,上述等式就會變成
cost(S, E) = cost(S, X) + cost(Y, T)

對於每個邊,都算一次 cost(S, X) + cost(Y, T),最小的那個就是所求

由於本題的圖是無向的,對 S 與 T 分別跑一次最短路,就可以求出所有的 cost(S, X) 與 cost(Y, T)=cost(T, Y)

如果遇到有向圖,則可先將原圖的所有邊都轉向(A→B變成B→A,即每個邊的起點終點對調),得到反向的圖G',對G'上的T做最短路,得出的 cost(T, Y) 既代表反向圖G'上從T到Y的最短路,也代表原圖G上從Y到T的最短路 (此結果的正確性不在此證明,可以自己想想or查網路)

 

2. 疊圖

建圖時,對於每顆正常星星A,我們額外多存一顆「疊加星星」A'

對兩顆星星 u, v,我們令從正常星星 u 移動到疊加星星 v' 的意義,代表從u移到v時使用了裝置,讓穿越時間變成0

於是建邊時,對於每個邊(X, Y, T),除了多加(Y, X, T)外(因為是無向圖),再額外建立四個邊(X, Y', 0)、(Y, X', 0)、(X', Y', T)、(Y', X', T)

對這個疊了兩層的圖正常跑最短路,所求即為 cost(X, Y')

如果圖共有N顆星星,你可以把編號A的疊加星星A'的編號設為A+N

 
#26: Re:題解


911091@stu.cchs.chc.edu.tw (17莊明達 David)

學校 : 彰化縣精誠中學
編號 : 4
來源 : [111.246.30.44]
最後登入時間 :
2023-06-10 18:41:31
a212. 星際快遞二 | From: [111.246.13.15] | 發表日期 : 2023-04-09 22:03

兩種想法

1. 做兩次最短路

...


想法 1. 有些代號弄錯了,於是重寫一遍。

.....

 

假設要從A走到B

設想一個路徑有通過一個邊 (X, Y, T),我們可以把花費時間拆成三個部分:
cost(A, B) = cost(A, X) + cost(X, Y) + cost(Y, B) = cost(A, X) + T + cost(Y, B)
如果對此邊使用裝置,那麼意思就是 T=0,上述等式就會變成
cost(A, B) = cost(A, X) + cost(Y, B)

對於每個邊,都算一次 cost(A, X) + cost(Y, B),最小的那個就是所求

由於本題的圖是無向的,對 A 與 B 分別跑一次最短路,就可以求出所有的 cost(A, X) 與 cost(Y, B)=cost(B, Y)

如果遇到有向圖,則可先將原圖的所有邊都轉向(A→B變成B→A,即每個邊的起點終點對調),得到反向的圖G',對G'上的B做最短路,得出的 cost(B, Y) 既代表反向圖G'上從B到Y的最短路,也代表原圖G上從Y到B的最短路 (此結果的正確性不在此證明,可以自己想想or查網路)

 

 
ZeroJudge Forum