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 了