AcWing 860. 染色法判定二分图
原题链接
简单
作者:
minux
,
2020-04-28 10:37:01
,
所有人可见
,
阅读 561
#include <bits/stdc++.h>
using namespace std;
const int N=1e5+5;
vector<int> G[N];
int COLORS[N];
int n,m;
bool dfs(int v, int color){
COLORS[v]=color;
for(auto &e: G[v]){
if(COLORS[e]==-1){
if(!dfs(e, 1-color))
return false;
}
else if(COLORS[e]==COLORS[v])
return false;
}
return true;
}
int main(){
memset(COLORS, -1, sizeof COLORS); // 使用01染色, -1表示当前节点为染色
cin>>n>>m;
int x,y;
// 存储无向图
while(m--){
cin>>x>>y;
G[x].push_back(y);
G[y].push_back(x);
}
for(int i=1; i<=n; ++i){
if(COLORS[i]==-1)
if(!dfs(i, 0)){
cout<<"No"<<endl;
return 0;
}
}
cout<<"Yes"<<endl;
return 0;
}