860. 染色法判定二分图

#include<bits/stdc++.h>
using namespace std;
int n,m;
const int N=1e5+10;
int h[N],e[N*2],ne[N*2],idx;//真的很重要
int flag[N];
void add(int a,int b)
{
    e[idx]=b;
    ne[idx]=h[a];
    h[a]=idx++;
}

bool dfs(int u,int color)
{
    flag[u]=color;
    for(int i=h[u];i!=-1;i=ne[i])
    {
        int v=e[i];
        if(!flag[v])
        {
            if(!dfs(v,3-color))
            {
                return false;
            }
        }
        else if(flag[v]==color)
        {
            return false;
        }
    }
    return true;
}
int main()
{
     cin>>n>>m;
     memset(h,-1,sizeof h );
     for(int i=0;i<m;i++)
     {
         int a,b;
         cin>>a>>b;
         add(a,b);
         add(b,a);
     }
     bool res=true;
     for(int i=1;i<=n;i++)
     {
         if(!flag[i])
         {
             if(!dfs(i,1))
             {
                 res=false;
                 break;
             }
         }
       
     }
     if(res)
     {
         cout<<"Yes";
     }
     else{
         cout<<"No";
     }
}

860. 染色法判定二分图

给定一个n个点m条边的无向图,图中可能存在重边和自环。

请你判断这个图是否是二分图。

输入格式

第一行包含两个整数n和m。

接下来m行,每行包含两个整数u和v,表示点u和点v之间存在一条边。

输出格式

如果给定图是二分图,则输出“Yes”,否则输出“No”。

数据范围

1≤n,m≤1051≤n,m≤105

扫描二维码关注公众号,回复: 9349044 查看本文章

输入样例:

4 4
1 3
1 4
2 3
2 4

输出样例:

Yes
发布了78 篇原创文章 · 获赞 30 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_42333573/article/details/100178176
今日推荐