AcWing 860. 染色法判定二分图-白书c++STL写法
原题链接
简单
作者:
〆NukezY丶
,
2020-07-07 21:56:00
,
所有人可见
,
阅读 813
#include<bits/stdc++.h>
using namespace std;
const int MAX_V = 1e5+10;
vector<int> G[MAX_V]; // 存图
int V,e; // 顶点数和边数
int color[MAX_V]; // 顶点的颜色(1 or -1)
bool dfs(int v,int c){
color[v] = c; // 把顶点v染成颜色c;
for(int i =0; i < G[v].size();i++){
// 如果相邻的顶点同色,则返回false
if(color[G[v][i]] == c ) return false;
// 如果相邻的顶点还没染过色,则染成-c
if(color[G[v][i]] == 0 && !dfs(G[v][i],-c)) return false;
}
return true;
}
void solve(){
for(int i =0;i<V;i++){
if(color[i] == 0 ){
//如果顶点i 还没染过色,则染成1;
if(!dfs(i,1)){
cout<<"No"<<endl;
return ;
}
}
}
cout<<"Yes"<<endl;
}
int main() {
cin>>V>>e;
for(int i =0;i<e;i++){
int u ,v;
cin>>u>>v;
G[u].push_back(v);
G[v].push_back(u);
}
solve();
return 0;
}