#41572: C++詳解


toseanlin@gmail.com (Dr. SeanXD)

學校 : 康橋雙語學校
編號 : 158065
來源 : [24.147.249.5]
最後登入時間 :
2024-10-28 09:54:40
a454. TOI2010 第二題:專案時程 -- 2010TOI研習營初選 | From: [24.147.249.5] | 發表日期 : 2024-08-08 10:10

將每個節點的耗費天數、前面的全部節點、後面的全部節點存起來,並且宣告一個 answer 變數預設為 0。

使用 DFS,需要的參數有目前的節點位置還有一個整數 weight 代表目前加起來所耗費的天數。每次進 DFS 時都要將 weight += 目前節點的耗費天數,並且要宣告一個 Map<int, int> ans 來存每個節點的最大耗費天數,每次都要更新 ans[目前節點],看是 ans[目前節點] 比較大還是 weight,更新值為較大者。然後,還要更新 answer 變數至最大值,和 ans[目前節點] 比較。

跑一個 For迴圈 將目前節點的所有「後面的節點」進行判斷,如果有節點可以走,亦代表其節點前面的點都走過了,就可以再呼叫新的 DFS。這邊可以再宣告一個 Map<int, int> 來判斷哪些的點已經走過了。

因為有可能會有多個圖的情況,所以呼叫 DFS 是要用 For迴圈 將每個節點做判斷再來呼叫 DFS,如果跑到的節點是起點,亦代表其前面沒有任何節點,就使用目前這個節點來呼叫 DFS。

最後要輸出的數值為 answer 變數。

 

範例程式碼

 
ZeroJudge Forum