Problem#
有 n 個人(1…n),和 dislike 陣列其中 dislike[i] = (a_i, b_i) 代表 a 不喜歡 b。
問你能不能把這群人分成兩組,組內的人不能互相不喜歡。
想法#
這題是判斷是不是二分圖裸題,確認圖上是否有奇環,或是可以想成著色問題,相鄰的兩個點不同色
用一個 color 陣列紀錄所有點的顏色(無色-1、紅色0、藍色1),一開始都是無色,接著用 DFS 或 BFS 遍歷所有點 i,如果點 i 沒有顏色,就先把它變紅色,
接著讓相鄰其他無色的點 j 變成跟點 i 相異的顏色,並繼續 DFS or BFS 點 j,如果在途中發現點 i 和點 j 同色,則不是二分圖。
- 時間複雜度: $\mathcal{O}(V+E)$
- 空間複雜度: $\mathcal{O}(V)$
AC Code#
賞析#
https://leetcode.com/problems/possible-bipartition/solutions/2834180/possible-bipartition/?orderBy=hot
https://fjuonlinejudge.github.io/Training/graph/bigraph/
心得#
一開始把資料結構寫在 Solution 外面 (global scope),結果一直遇到詭異的問題,猜測是 leetcode judge 多筆測資是在同個 process 反覆 new 你的 solution object
把東西都搬進去就 AC 了