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

染色法判定二分图

时间:2024-09-24 20:51:28浏览次数:10  
标签:二分 输出 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

相关文章

  • cnblogs的GitHub同步markdown文件的blog如何识别文章的唯一性(身份ID如何判定)
    本篇blog是写在GitHub的对应的仓库中的。cnblogs会给终身用户提供一个把GitHub仓库中的markdown文件同步到cnblogs上的一个服务,本文就是使用这个服务同步到个人blog地址的:https://cnblogs.com/xyz问题1:何时触发blogs的同步?当仓库中的markdown文件有更新时,cnblogs会自动同......
  • 判断质数(小白秒懂版本)短时间记忆二分模板
    给定 n个正整数 ai,判定每个数是否是质数。输入格式第一行包含整数 n。接下来 n 行,每行包含一个正整数 ai。输出格式共 n行,其中第 i行输出第 i个正整数 ai是否为质数,是则输出 Yes,否则输出 No。数据范围1≤n≤100,1≤ai≤231−1输入样例:226输出样例:Yes......
  • 使用二分查找提高点击进度条时检索字幕索引的效率
    使用二分查找提高点击进度条时检索字幕索引的效率在现代网页应用中,点击进度条是常见的交互方式,尤其在音频播放器中,用户可以通过点击进度条快速跳转到不同的时间点。在我的英语听力训练网站项目中,我们需要根据用户点击进度条的位置,实时检索到对应的字幕内容。为了提高检索效......
  • 算法解析:二分查找实现整数平方根
    题目:给你一个非负整数 x ,计算并返回 x 的算术平方根 。由于返回类型是整数,结果只保留整数部分 ,小数部分将被舍去。注意:不允许使用任何内置指数函数和算符,例如 pow(x,0.5) 或者 x**0.5 。示例1:输入:x=4输出:2示例2:输入:x=8输出:2解释:8的算术平方根是2.82842.........
  • 二分图
    定义节点由两个集合组成,且两个集合内部没有边的图性质无奇环每条边都是从一个集合走向另一个集合。二分图判定使用染色法。进行\(dfs\),为图进行黑白染色,若可以完成则该图是二分图。boolvis[N];//0:未染色,1:黑色,2:白色boolflag=1;voiddfs(intx){ for(autoy:v[......
  • 算法随笔——wqs二分
    学习链接学习链接应用条件选择恰好\(x\)个物品,求最优值设\(x\)对应最优值\(f_x\),\((x,f_x)\)在图像上呈现为凸包。无数量限制问题简单可做问题转化有\(n\)个物品,恰好选\(m\)个,计算最优值。做法例题模版题:P2619......
  • 【oj刷题】二分查找篇:二分查找算法的原理和应用场景
    前言:二分查找算法,又称折半查找算法,是一种在有序数组中查找特定元素的高效查找方法。它通过将搜索区间不断缩小一半,从而在对数时间内找到目标元素。二分查找是基于分治策略的一种典型应用,能够高效的处理许多问题,下面我们就来看一下二分查找算法的原理和应用场景目录一、什......
  • 算法设计与分析(二分查找算法
    目录二分查找算法详解引言算法步骤代码实现注意事项结论小结:二分查找算法详解引言二分查找算法是一种在有序数组中查找特定元素的搜索算法。它通过不断将数组分成两半,缩小搜索范围,从而快速定位到目标元素的位置。二分查找算法的时间复杂度为O(logn),其中n是数组的长度。算法步骤......
  • 算法学习每日一题之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......