思路,枚举点BFS+层级染色:
class Solution {
public:
bool possibleBipartition(int N, vector<vector<int>>& dislikes) {
vector<int> color(N+1);
vector<vector<int>> Edge(N+1,vector<int>(0));
for(int i=0;i<dislikes.size();i++){
int a = dislikes[i][0];
int b = dislikes[i][1];
Edge[a].push_back(b);
Edge[b].push_back(a);
}
queue<int> q;
for(int k=1;k<=N;k++){
if(color[k] != 0) continue;
q.push(k);
color[k] = 1;
while(!q.empty()){
int now = q.front();
q.pop();
for(int i=0;i<Edge[now].size();i++){
int next = Edge[now][i];
if(color[next] == 0){
q.push(next);
color[next] = color[now]+1;
}else{
for(int j=0;j<Edge[next].size();j++){
int near = Edge[next][j];
if(color[near] == 0) continue;
if( (color[near] + color[next])%2 == 0 ) return false;
}
}
}
}
}
return true;
}
};