概述
时间复杂度m+n
#include<iostream>
#include<string.h>
using namespace std;
const
int N=200010;
int n,m;
int h[N],ne[N],idx,e[N];
int color[N];
void add(int a,int b)
{
ne[idx]=h[a],e[idx]=b,h[a]=idx++;
}
bool dfs(int c,int u)
{
color[u]=c;
for(int i=h[u];i!=-1;i=ne[i])
{
int j=e[i];
if(!color[j])
{
if(!dfs(3-c,j))
return false;
}
else
if(color[j]==c)
return false;
}
return true;
}
int main()
{
memset(h,-1,sizeof h);
cin>>n>>m;
while(m--)
{
int a,b;
cin>>a>>b;
add(a,b);
add(b,a);
}
bool flag=true;
for(int i=1;i<=n;i++)
{
if(!color[i])
{
flag=dfs(1,i);
if(!flag)
break;
}
}
if(!flag)
puts("No");
else
puts("Yes");
return 0;
}
最后
以上就是复杂牛排为你收集整理的染色法(判断是否为二分图)的全部内容,希望文章能够帮你解决染色法(判断是否为二分图)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复