#41654: C++詳解


toseanlin@gmail.com (Dr. SeanXD)

學校 : 康橋雙語學校
編號 : 158065
來源 : [24.147.249.5]
最後登入時間 :
2024-10-28 09:54:40
f677. FJCU_109_Winter_Day3_Lab1 並查集練習 | From: [24.147.249.5] | 發表日期 : 2024-08-15 12:37

使用 Map 來紀錄每一個人的最底層接觸者,一開始將所有人的 Map 值都預設為 -1。

宣告一個函式 findEnd,需要一個參數 N,如果 N == -1 || Map[N] == -1,return N。如果 Map[N] == N,return N。否則 return findEnd(Map[N])。

輸入資料時,如果兩個人都沒有接觸史,則要判斷其中是否有 0,如果有的話就要將另一個人的 Map 值設定為 0。如果兩個人都有接觸史,則要判斷其中有沒有 0,如果有 0 的話就將另一個人的 Map[findEnd(另一個人)] 設為 0,否則就將其設為 findEnd(另一個人)。如果是一個有一個沒有,則將沒有的人的 Map 值設定成 findEnd(另一個人)。

最後跑一個從 0 到 N-1 的迴圈,如果 findEnd(Map[目前數字]) == 0,就將答案 +1。

 

範例程式碼

 
ZeroJudge Forum