使用並查集的方式來做資料的存儲,當在收 2*M 個 pair 的時候,跑一個函式來更新兩個全域陣列中的資料,兩個陣列分別為 friends 和 enemies,代表每一個人他的隊友和另外一組的人。在程式一開始時可以將兩個陣列從 0 到 N-1 分別預設為 -1。如果進函式時兩個人的 friends 陣列資料都是 -1,代表兩個人都沒有做過判斷,所以就將 friends 設為自己、enemies 設為另外一個人。如果兩個人的 friends 陣列資料都 != -1,代表兩個人都有判斷過,這邊要將兩個人所有的朋友和敵人都分別設置為新的朋友和敵人,下面的程式碼是使用函式的方式去做遞迴將每一個人的朋友、敵人設定為新的人。如果是其中一個人已經有資料另外一個人是 -1,則是將沒有資料的人的 friends 設定為另外一人的敵人的朋友根節點、enemies 設定為另外一個人的朋友根節點。
在判斷新的 pair 是否正確時也需要做資料的判斷,所以可以重新宣告一個 newFriend 和 newEnemy,並將 friends 和 enemies 的資料移過去,收到新的要判斷的 pair 時,要做的事情其實和上面的差不多,只是當兩個人的 newFriend 和 newEnemy 都有做過判斷時就不需要做判斷,跑完函式之後就是判斷 newFriend[a] 是否 == newFriend[b]。