三種寫法:
.set 集合法(最慢, 容易 TLE)->NA:60%
.陣列 list 遍歷法(第二快, 遍歷陣列時會花比較多時間)->NA:70%
.樹根節點法 + 壓縮路徑(最快, 可通過)->AC:1.4s,3.7MB
集合法 <- 點擊可跳轉
陣列法 <- 點擊可跳轉
樹根法 <- 點擊可跳轉
輸入說明
第一行有三個正整數 N , M , Q (N <= 10000 , M <= 10000 , Q <= 100000)
代表有 N 個人 , M 筆朋友關係 , Q 筆詢問
接下來有 M 行, 每行有兩個正整數 A , B (A,B <= N)
代表 A 和 B 有 朋友 關係
再來有 Q 行, 每行兩個正整數 P , Q (A,B <= N)
輸出說明
請輸出 P 和 Q 是不是朋友
如果是請輸出 “:)”
否則請輸出 “:(“
樹根節點法
利用 Tree 結構加上路徑壓縮, 可以讓尋根的時間大幅縮短, 與陣列法差在路徑壓縮
1 | def find_root(x): # 路徑壓縮法 -> 尋根時, 同時更新路徑【父節點 -> 根節點】 |
陣列法
利用 list 陣列紀錄所有數的「group」, 默認等於 0, 當輸入兩數皆有群組 (group) 時, 遍歷陣列將兩者的 group 設為相同, 遍歷時會 TLE
1 | N,M,Q=map(int,input().split()) |
集合法
就…用太多迴圈了, 超沒效率
1 | people,friend,ask=map(int,input().split()) |

作者: 微風