【AcWing】860. 染色法判定二分图

news2024/9/20 7:59:57

二分图,把所有点划分到两边去,使得所有边都是在集合之间的,集合内部没有边。

一个图是二分图,当且仅当图中不含奇数环(环的边数是奇数)。这是个充分必要条件,是二分图就一定不含奇数环;不含奇数环就一定是二分图。

从前往后遍历每一个点,然后如果当前这个点还没有分好组的话,我们就把它分到左边去(右边也行),分完这个点之后,遍历一下这个点所有的邻点,所有和这个点连通的点,染色这个点所在的连通块。这个点属于左边的,那他相邻的点就属于右边,和右边这个点相邻的点就属于左边。

可以看成是一个染色的过程,我们要把所有点染上颜色(白色、黑色)。一条边的两个端点颜色不同,属于不同集合。通过这种方式可以把图中所有的点染色。

一个连通块中只要有一个点的颜色确定了,整个连通块所有点的颜色就确定了。

我们就可以用这样一种构造方式把整个图分成两个点集,使得所有边都是出现在两个点集之间的,那么显然是一个二分图。

某一次我们一个白色的点,搜到了一个已经染过颜色的点,之前染过颜色这个点和当前这个点颜色是相同的,那就矛盾了,环中的点一定是奇数。

染色法判断一个图是不是二分图。一个图在染色过程中出现了矛盾,说明存在奇数环,就不是二分图。没有出现矛盾,可以完美的染一遍,就说明没有奇数环,就是二分图。

#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;

const int N=1e5+10,M=2e5+10;//无向图两条边2e5

int n,m;
int h[N],e[M],ne[M],idx;
int color[N];//0代表没染色,染色的两种颜色是1和2

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!=-1;i=ne[i]){//遍历这的点所有出边
        int j=e[i];
        if(!color[j]){//如果没有染色
            if(!dfs(j,3-c)) return false;//那就染色,3-c把1变成2,把2变成1,染相对的颜色。
        }else if(color[j]==c) 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 flag=true;//是否成功完成染色过程
    for(int i=1;i<=n;i++){
        if(!color[i]){
            if(!dfs(i,1)){//染了颜色1
                flag=false;
                break;
            }
        }
    }
    
    if(flag) puts("Yes");
    else puts("No");
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2118294.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工业设备网关在智能工厂建设中发挥的作用,以某汽车制造厂为例

在当今工业4.0的大潮中&#xff0c;智能化和数字化已经成为制造业发展的关键驱动力。工业设备网关&#xff0c;作为连接工业现场设备与上层系统的纽带&#xff0c;其作用不可小觑。本文将以某汽车制造厂的智能化改造项目为例&#xff0c;详细探讨工业设备网关在实际应用中的优势…

CS5363|CS5263升级方案|DP转HDMI 4K60HZ芯片方案

CS5363是一种高度集成的单芯片&#xff0c;适用于多个细分市场和显示应用&#xff0c;如Typec扩展、手机/电脑投屏、扩展底座、投影仪等。 CS5363管脚分布情况如下&#xff1a; CS5363是一款高度集成的单芯片&#xff0c;适用于多个mGeneral 支持最高分辨率/定时4k60Hz 支持…

饿了么官方霸王餐API接口该如何对接?

外卖霸王餐API接口是一种为餐饮行业设计的应用程序编程接口&#xff0c;它允许第三方平台或应用程序与外卖平台进行数据交换和功能集成。通过这种接口&#xff0c;商家可以实现自动化管理&#xff0c;提高运营效率&#xff0c;同时为消费者提供更加便捷和个性化的服务体验。 霸…

记录debug分析nacos源码

nacos源码分析 一、环境构建二、源码分析1. 启动类2. 源码的中的案例3.. 服务订阅流程梳理3.1. 从 NamingFactory.createNamingService(properties);说起3.2. 服务订阅总结 4. 服务注册流程梳理4.1. 从 naming.registerInstance("nacos.test.3", "11.11.11.11&q…

【文心智能体】通过工作流使用知识库来实现信息查询输出,一键查看旅游相关信息,让出行多一份信心

欢迎来到《小5讲堂》 这是《文心智能体平台》系列文章&#xff0c;每篇文章将以博主理解的角度展开讲解。 温馨提示&#xff1a;博主能力有限&#xff0c;理解水平有限&#xff0c;若有不对之处望指正&#xff01; 目录 创建灵感基本配置头像名称和简介人物设定角色与目标思考路…

一文读懂数据血缘分析原理与建设方法

什么是数据血缘分析?数据血缘为数据全生命周期过程中的数据关系&#xff0c;包括数据特征的变化&#xff0c;即数据的来龙去脉。主要内容包括数据的来源、数据的加工方式、映射关系以及数据的流出和消费。数据血缘分析就是针对数据分析中的血缘关系做分析&#xff0c;主要包含…

第二证券:10倍“妖股”一天暴跌98% 揭秘港股那些做局套路

尽管港股行情全体低迷&#xff0c;自上一年以来港股商场仍不乏短短时日暴升10倍以上的疑似“妖股”&#xff0c;这些公司普遍具有一起的特征&#xff1a;刚上市不久的新股、次新股&#xff0c;市值较小、股权高度会集。 证券时报记者通过查询发现&#xff0c;这类股票反面往往…

图片无损缩放PhotoZoom Pro 9.0.2绿色版 +免费赠送PhotoZoom激活优惠代码

PhotoZoom Pro 9.0.2 是一款专业的图片无损缩放软件&#xff0c;该软件采用了 benvista s-spline 独特技术&#xff0c;增强了对图像格式的支持&#xff0c;多处理器支持&#xff0c;GPU 加速&#xff0c;win10和 Photoshop CC 支持。带来一流的数字图形扩展与缩减技术。该软件…

torch torchvision 安装失败解决方法

按照安装教程在安装Torch torchvision的时候报错 报错内容&#xff1a; ERROR: Could not find a version that satisfies the requirement torch (from versions: none)ERROR: No matching distribution found for torch 出现这个情况&#xff0c;有说要换源什么的&#xff…

博客常见问题

hexo g 生成静态文件 hexo s 本地预览 hexo d 同步上传到git 1、输入hexo d &#xff0c;上传到git时&#xff0c;报错 看了下git的配置&#xff0c;没有问题&#xff0c;单机过去也能直接到我的git上 可能是传不过去&#xff0c;token的问题 最下面开发者设置&#xff0c;找到…

单片机毕业设计-基于单片机的运动手环

文章目录 前言资料获取设计介绍功能介绍程序代码部分参考 设计清单具体实现截图参考文献设计获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师&#xff0c;一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP…

2024年【浙江省安全员-C证】找解析及浙江省安全员-C证模拟考试题库

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 浙江省安全员-C证找解析是安全生产模拟考试一点通生成的&#xff0c;浙江省安全员-C证证模拟考试题库是根据浙江省安全员-C证最新版教材汇编出浙江省安全员-C证仿真模拟考试。2024年【浙江省安全员-C证】找解析及浙江…

如何在页面调用utility bar并传递参数至lwc组件

1.在app的utility item中添加lwc组件&#xff1a; 2.调用utility bar api的方式有两种&#xff1a; 方法一&#xff0c;通过lwc调用&#xff1a; import {LightningElement,api ,wire } from lwc; import { publish, MessageContext } from lightning/messageService; imp…

新手烤鸡测试——单烤没拉满

文章目录 电脑配置先来一波硬件信息硬盘检测cpu-Z跑分AIDA64单烤FPUDistInfoDiskMark查看硬盘读写次数 电脑配置先来一波 图吧下载地址 硬件信息 硬盘检测 cpu-Z跑分 AIDA64单烤FPU 压榨cpu性能结果 DistInfo 计算了一下到几天快两个月的使用时间也没差 DiskMark查看硬盘读…

批量复制指定文件夹——EXCEL VBA 实现

工作中往往需要复制特定文件夹&#xff0c;例如&#xff0c;一个文件夹中有100个文件夹&#xff0c;我只需要复制其中50个文件夹&#xff0c;这50个文件夹的名字放入excel表中第一列&#xff0c;从第二行开始&#xff08;注意&#xff1a;第一行的表头不能覆盖&#xff09;&…

三十三、Gin的中间件

目录 定义&#xff1a; 一、处理请求前执行 1、模拟请求前需要鉴权 2、使用use方法 3、实验 二、处理请求后执行 1、在具体方法中添加输出方便观察整个处理请求过程生命周期 2、在next方法后增加输出即可在处理完成请求后执行内容 3、最终执行结果 定义&#xff1a; 在…

大模型LLM算法工程师技术面试指南

大模型LLM算法工程师技术面试指南 AI大模型全套学习资料 “最先掌握AI的人&#xff0c;将会比较晚掌握AI的人有竞争优势”。 这句话&#xff0c;放在计算机、互联网、移动互联网的开局时期&#xff0c;都是一样的道理。 我在一线互联网企业工作十余年里&#xff0c;指导过不少…

防跌倒识别摄像机

防跌倒识别摄像机 是一种结合了人工智能技术和监控摄像技术的先进设备&#xff0c;旨在通过实时监测和分析监控画面中的行为动作&#xff0c;及时发现并预防跌倒事件的发生。这种摄像机在医疗、养老院、家庭等场所有着广泛的应用前景。 防跌倒识别摄像机在医疗领域具有重要意义…

社群空间站付费入群系统易支付版全套搭建教程

社群空间站9.9付费入群系统易支付版全套搭建教程 1.创建站点 2.搭建环境 php7.2 3.上传源码包 数据库批量修改sq9.dongge1.icu s10.dongge1.icu 改为你的域名 4.上传数据库 修改数据库文件/data/config/ 5.访问域名 6.账户密码 admin 123456 7.易支付修改地址是在/data…

SpringBoot2:请求处理原理分析-常用接口方法参数整理

文章目录 1、常用的原生API参数2、一些自带的复杂参数3、自定义Bean参数4、自定义参数转换服务5、总结 1、常用的原生API参数 作用说明&#xff1a;在接口方法参数放入一些原生API作为参数使用。 案例&#xff1a; 接口收参形式&#xff1a; RequestMapping("/test"…