二分图:当且仅当图中不存在奇数环(环的边数是奇数)。两个集合内部都不存在连边
#include<bits/stdc++.h>
using namespace std;
const int N=2e5+10;
int e[N],ne[N],h[N],idx;
int n,m;
int color[N];
void add(int a,int b)
{
e[idx]=b;ne[idx]=h[a];h[a]=idx++;
}
bool dfs(int u,int c)
{
color[u]=c;
for(int i=h[u];~i;i=ne[i]){
int v=e[i];
if(!color[v]){
if(!dfs(v,3-c)) return false;
}
else{
if(color[v]==c) return false;
}
}
return true;
}
int main()
{
scanf("%d %d",&n,&m);
memset(h,-1,sizeof h);
for(int i=1,x,y;i<=m;i++)
{
scanf("%d %d",&x,&y);
add(x,y);add(y,x);
}
int f=0;
for(int i=1;i<=n;i++)
{
if(!color[i]){
if(!dfs(i,1)){
f=1;
break;
}
}
}
if(f==1) puts("No");
else puts("Yes");
}