Skip to content

Commit 485719d

Browse files
authored
Update 785.is-graph-bipartite.md
1 parent eefcf52 commit 485719d

File tree

1 file changed

+52
-5
lines changed

1 file changed

+52
-5
lines changed

problems/785.is-graph-bipartite.md

+52-5
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,11 @@ graph[i] 不会包含 i 或者有重复的值。
4949

5050
- 暂无
5151

52-
## 思路
52+
## 着色法 + DFS
53+
54+
求二分图有两种思路,一个是着色法,另外一个是并查集。
55+
56+
### 思路
5357

5458
和 886 思路一样。 我甚至**直接拿过来 dfs 函数一行代码没改就 AC 了**
5559

@@ -68,12 +72,12 @@ graph[i] 不会包含 i 或者有重复的值。
6872

6973
强烈建议两道题一起练习一下。
7074

71-
## 关键点
75+
### 关键点
7276

7377
- 图的建立和遍历
7478
- colors 数组
7579

76-
## 代码
80+
### 代码
7781

7882
```py
7983
class Solution:
@@ -102,8 +106,10 @@ class Solution:
102106

103107
**复杂度分析**
104108

105-
- 时间复杂度:$O(N^2)$
106-
- 空间复杂度:$O(N)$
109+
令 v 和 e 为图中的顶点数和边数。
110+
111+
- 时间复杂度:$O(v+e)$
112+
- 空间复杂度:$O(v+e)$
107113

108114

109115
如上代码并不优雅,之所以这么写只是为了体现和 886 题一致性。一个更加优雅的方式是不建立 grid,而是利用题目给的 graph(邻接矩阵)。
@@ -123,6 +129,47 @@ class Solution:
123129
if colors[i] == 0 and not dfs(i,1): return False
124130
return True
125131
```
132+
## 并查集
133+
134+
### 思路
135+
136+
遍历图,对于每一个顶点 i,将其所有邻居进行合并,合并到同一个联通域中。这样当发现某个顶点 i 和其邻居已经在同一个联通分量的时候可以直接返回 false,否则返回 true。
137+
138+
### 代码
139+
140+
```py
141+
class UF:
142+
def __init__(self, n):
143+
self.parent = {}
144+
for i in range(n):
145+
self.parent[i] = i
146+
def union(self, i,j):
147+
self.parent[self.find(i)] = self.find(j)
148+
def find(self, i):
149+
if i == self.parent[i]: return i
150+
self.parent[i] = self.find(self.parent[i])
151+
return self.parent[i]
152+
def is_connected(self, i,j):
153+
return self.find(i) == self.find(j)
154+
155+
class Solution:
156+
def isBipartite(self, graph: List[List[int]]) -> bool:
157+
n = len(graph)
158+
uf = UF(n)
159+
for i in range(n):
160+
for neibor in graph[i]:
161+
if uf.is_connected(i, neibor): return False
162+
uf.union(graph[i][0], neibor)
163+
return True
164+
```
165+
166+
167+
**复杂度分析**
168+
169+
令 v 和 e 为图中的顶点数和边数。
170+
171+
- 时间复杂度:$O(v+e)$
172+
- 空间复杂度:$O(v+e)$
126173

127174
## 相关问题
128175

0 commit comments

Comments
 (0)