首页 > 其他分享 >染色法判定二分图

染色法判定二分图

时间:2024-09-24 20:51:28浏览次数:15  
标签:二分 输出 idx int mm add 判定 染色法

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

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

输入格式

第一行包含两个整数 nn 和 mm。

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

输出格式

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

数据范围

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

输入样例:
4 4
1 3
1 4
2 3
2 4
输出样例:
Yes
#include <iostream>
#include <cstring>
using namespace std;
const int N=1e5+10,M=N*2;
int h[N],e[M],ne[M],idx;
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)
{
    cout<<u<<" "<<c<<endl;
    color[u]=c;
    for(int i=h[u];i!=-1;i=ne[i])
    {
        int j=e[i];
        if(!color[j])
        {
            if(!dfs(j,3-c))
            {
                return false;
            }
                
        }
        else if(color[j]==c)   
        {
                return false;
        }
    }
    return true;
}
int n,m;
int main()
{
    cin>>n>>m;
    memset(h,-1,sizeof(h));
   while(m--)
   {
       int x,y;
       cin>>x>>y;
       add(x,y);
       add(y,x);
       
   }
   int flag=0;
   for(int i=1;i<=n;i++)
   {
       if(!color[i])
       {
           if(!dfs(i,1))
           {
               flag=true;
               break;
           }
       }
   }
   if(!flag)    puts("Yes");
   else puts("No");
}

标签:二分,输出,idx,int,mm,add,判定,染色法
From: https://blog.csdn.net/black_blank/article/details/142500073

相关文章

  • 算法解析:二分查找实现整数平方根
    题目:给你一个非负整数 x ,计算并返回 x 的算术平方根 。由于返回类型是整数,结果只保留整数部分 ,小数部分将被舍去。注意:不允许使用任何内置指数函数和算符,例如 pow(x,0.5) 或者 x**0.5 。示例1:输入:x=4输出:2示例2:输入:x=8输出:2解释:8的算术平方根是2.82842.........
  • 【oj刷题】二分查找篇:二分查找算法的原理和应用场景
    前言:二分查找算法,又称折半查找算法,是一种在有序数组中查找特定元素的高效查找方法。它通过将搜索区间不断缩小一半,从而在对数时间内找到目标元素。二分查找是基于分治策略的一种典型应用,能够高效的处理许多问题,下面我们就来看一下二分查找算法的原理和应用场景目录一、什......
  • 算法学习每日一题之2332. 坐上公交的最晚时间:二分答案 & 贪心双指针
    Problem:2332.坐上公交的最晚时间人话题意:你是一个懒惰的人,虽然你要赶公交车,但你想多睡会,恰好你知道每辆车的发车时间buses和每辆车容capacity,和每个乘客乘车的时间passenger,旨在求可以赶上公交车的最晚出发时间。思路一:二分答案求最晚能满足赶上公交的时间,可以发现......
  • 算法笔记2:二分
    二分二分可以求得满足条件的左边界或右边界,如下图所示查找左边界(绿色区域的最左边):intSL(intl,intr){while(l<r){intmid=l+r>>1;if(check(mid))r=mid;elsel=mid+1;}re......