-
Notifications
You must be signed in to change notification settings - Fork 495
/
Copy pathcheckBipartite.cpp
96 lines (79 loc) Β· 1.43 KB
/
checkBipartite.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
//A graph Can be said bipartite the graph can be coloured using 2 colours only such a way that no 2 adjacent vertex will be of same colour
//Here its explained using BFS algorithm
//CODE:
#include<bits/stdc++.h>
using namespace std;
bool bipartite(int src, vector<int>adj[],int color[]){
queue<int>q;
q.push(src);
color[src]=1;
while(!q.empty()){
int node=q.front();
q.pop();
for(auto it:adj[node]){
if(color[it]==-1){
color[it]=1-color[node];
q.push(it);
}
else if(color[it]==color[node])
{
return false;
}
}
}
return true;
}
bool checkBipartite(vector<int>adj[], int n){
int color[n];
memset(color,-1,sizeof color);//to set all value memset is used
for(int i=0;i<n;i++){
if(color[i]==-1){
if(!bipartite(i,adj,color)){
return false;
}
}
}
return true;
}
int main(){
int n,m; //n=nodes, m=edges
cin>>n>>m;
vector<int>adj[n];
for(int i=0;i<m;i++){
int u,v;
cin>>u>>v;
adj[u].push_back(v);
adj[v].push_back(u);
}
if(checkBipartite(adj,n)){
cout<<"yes";
}
else{
cout<<"no";
}
}
//INPUT: 1
/*
8 7
0 1
1 2
2 3
3 4
4 6
6 7
1 7
4 5
*/
//Output : yes
//INPUT: 2
/*
7 7
0 1
1 2
2 3
3 4
4 6
6 1
4 5
*/
//Output: no