LeetCode886 可能的二分法
/*
* @lc app=leetcode.cn id=886 lang=cpp
*
* [886] 可能的二分法
*/
// @lc code=start
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
class Solution {
public:
bool possibleBipartition(int n, vector<vector<int>>& dislikes) {
vector<vector<int>> g(n+1);
for(int i=0;i<dislikes.size();i++){//当做无向图处理
int from=dislikes[i][0],to=dislikes[i][1];
g[from].push_back(to);
g[to].push_back(from);
}
queue<int> q;
vector<int> color(n+1,0);
for(int i=1;i<=n;i++){
if(color[i]!=0) continue;//节点i已经被染色
q.push(i);
color[i]=1;
while(!q.empty()){
int u=q.front();
q.pop();
for(int v:g[u]){
if(color[v]==0){//将v染成与u不同的颜色
if(color[u]==1) color[v]=2;
else if(color[u]==2) color[v]=1;
q.push(v);
}
else if(color[v]!=0&&color[u]==color[v]) return false;//染色过程中出现矛盾
}
}
}
return true;
}
};