题目
Given a set of N
people (numbered 1, 2, ..., N
), we would like to split everyone into two groups of any size.
Each person may dislike some other people, and they should not go into the same group.
Formally, if dislikes[i] = [a, b]
, it means it is not allowed to put the people numbered a
and b
into the same group.
Return true
if and only if it is possible to split everyone into two groups in this way.
Example 1:
1 | Input: N = 4, dislikes = [[1,2],[1,3],[2,4]] |
Example 2:
1 | Input: N = 3, dislikes = [[1,2],[1,3],[2,3]] |
Example 3:
1 | Input: N = 5, dislikes = [[1,2],[2,3],[3,4],[4,5],[1,5]] |
Note:
1 <= N <= 2000
0 <= dislikes.length <= 10000
1 <= dislikes[i][j] <= N
dislikes[i][0] < dislikes[i][1]
- There does not exist
i != j
for whichdislikes[i] == dislikes[j]
.
思路
DFS.
Consider the graph on N
people formed by the given “dislike” edges. We want to check that each connected component of this graph is bipartite.
For each connected component, we can check whether it is bipartite by just trying to coloring it with two colors. How to do this is as follows: color any node red, then all of it’s neighbors blue, then all of those neighbors red, and so on. If we ever color a red node blue (or a blue node red), then we’ve reached a conflict.
代码
1 | class Solution(object): |