Leetcode 886 - Possible Bipartition

題目

Problem#

n 個人(1n),和 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 了