class Solution {
private:
bool ok=true;
vector<bool>color;
vector<bool>visited;
void traverse(vector<vector<int>>& graph,int v){
if(!ok){
return ;
}
visited[v]=true;
for(int w:graph[v]){
if(!visited[w]){
color[w]=!color[v];
traverse(graph,w);
}else{
if(color[w]==color[v]){
ok=false;
}
}
}
}
public:
bool isBipartite(vector<vector<int>>& graph) {
int n = graph.size();
color = vector<bool>(n);
visited=vector<bool>(n);
for(int v=0;v<n;v++){
if(!visited[v]){
traverse(graph,v);
}
}
return ok;
}
};