#41764: C++詳解


toseanlin@gmail.com (Dr. SeanXD)

學校 : 康橋雙語學校
編號 : 158065
來源 : [24.147.249.5]
最後登入時間 :
2024-10-08 11:06:51
e810. 2.潛水 (Diving) -- 2019年11月TOI練習賽潛力組 | From: [24.147.249.5] | 發表日期 : 2024-08-24 22:00

宣告一個 Map<int, vector<pair<int, int>>> 來存資料,pair 中的 second 是用來存 W 用的。宣告一個 ans 變數預設為 999999,還有一個陣列 point[1000] 裡面從 0 到 N-1 預設也是 999999,但是要將第 A 個位置的 point 設為 0。

跑 BFS,每一次就是判斷起點中的點的下一些點有誰,如果 point[目前判斷的位置] > ans,則不用判斷這個點直接 continue。並且要在函式外面宣告一個 all_walk 的 Map 來紀錄哪些點有走過了,每一次進到迴圈都要將 all_walk[目前位置]++。

在 BFS 中跑到的點都會有其下一個可以走到的點,宣告一個 newValue 變數 = max(point[目前 BFS 位置], 下一個點的 W)。如果 all_walk 中紀錄這個點沒有被走過,或是 newValue < point[下一個點],就將 all_walk[下一個點]++、將 point[下一個點] 更新成 newValue、並且將下一個點 Push_Back 到下一次的 BFS 起點中。

如果過程中跑到了 B 這個終點,則將 ans = min(ans, point[目前位置]),並且要宣告一個全域布林值來確認是否真的有走到終點過。

 

範例程式碼

 
ZeroJudge Forum