染色法判定二分图

染色法判定二分图

二分图:

1.当且仅当图中无奇数环

2.能且只能用两种颜色染色

 

#include <cstring>
#include <iostream>
#include <algorithm>
 
using namespace std;
 
const int N = 100010, M = 200010;
 
int n, m;
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)//深度优先遍历,u是当前点下标,c是当前点染的颜色
{
    color[u] = c;
 
    for (int i = h[u]; i != -1; i = ne[i])//遍历与u相邻的所有点
    {
        int j = e[i];
        if (!color[j])
        {//如果没染色就染成与u的颜色不同的颜色并且如果dfs为false就返回false
            if (!dfs(j, 3 - c)) return false;
        }
        else if (color[j] == c) return false;//如果染的颜色与u的颜色相同就返回false
    }
 
    return true;//剩余true
}
 
int main()
{
//邻接表存图
    scanf("%d%d", &n, &m);
    memset(h, -1, sizeof h);
    while (m -- )
    {
        int a, b;
        scanf("%d%d", &a, &b);
        add(a, b), add(b, a);//无向图-->双向存!
    }
 
    bool flag = true;//true是不矛盾
    for (int i = 1; i <= n; i ++ )//n个顶点进行染色法
        if (!color[i])
        {//如果没有染色,就涂成1号色,如果dfs返回false说明就是有矛盾就flag=false退出循环
            if (!dfs(i, 1))
            {
                flag = false;
                break;
            }
        }
 
    if (flag) puts("Yes");
    else puts("No");
 
    return 0;
}
 

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个纯前端实现的头像生成网站

vue-color-avatar —— 一款基于 Vite + Vue3 实现的矢量风格头像的生成器,你可以搭配不同的素材组件,生成自己的个性化头像。大家好,我是 Java陈序员。 今天,给大家介绍一个纯前端实现的头像生成网站。关注微信公众号:【Java陈序员】,获取开源项目分享、AI副业分享、超2…

CSS + v-bind

学而不思则罔,思而不学则殆!

SillyTavern搭建

github地址 https://github.com/SillyTavern/SillyTavern/tree/release SillyTavern 是一个可以安装在电脑(和安卓手机)上的用户界面,让您可以与文本生成的人工智能互动,并与您或社区创建的角色聊天/玩角色扮演游戏。环境查看 系统环境# cat /etc/redhat-release Rocky Li…

BUUCTF [SCTF2019]babyre

记录一下脱花指令的过程 扔进ida中观察,发现有红字报错。像这种肯定是花指令用来干扰程序的,将loc_98Fnop掉即可,大概有四处这样的花指令 在最后发现一段smc,因为没有解密函数,因此推测直接解密即可按d全部转化为数据,然后再按c转化为代码又出现一个花指令这个nop明显是干…

Windows下下载编译boost库

下载boost库 链接:https://www.boost.org/下载最新的版本即可,因为最新的版本是兼容以前版本的。 编译boost库 下载后解压如果没有b2.exe就先双击一下booststrap.bat自动生成文件。然后在此目录打开cmd; 执行命令: .\b2.exe install --toolset=msvc-14.3 --build-type=comp…

生物实验室设备文件采集如何才能质量和效率双管齐下?

生物实验室的设备文件采集是实验室运营、科研活动和数据科学实践应用中不可或缺的一环。通过数据采集,实验室可以优化资源配置、提高实验结果的准确性和可靠性、支持科研水平的提升,并确保数据的安全性和可追溯性。因此,实验室应高度重视设备数据采集工作,并不断优化数据采…

传输限速的方案那么多,却都没有这一个全面!

在很多行业和领域,传输速度并不是无限制地越快越好,反而基于很多原因,在很多情况下,需要对传输的速度进行限制,原因如下: 带宽分配:在有限的网络资源下,对传输进行限速可以确保关键应用和服务的优先级,避免某些应用或用户过度占用带宽资源,影响其他用户或应用的正常使…

用了组合式 (Composition) API 后代码变得更乱了,怎么办?

组合式 (Composition) API 的一大特点是“非常灵活”,但也因为非常灵活,也可能导致我们的代码变得愈发混乱,最终到达无法维护的地步。前言 组合式 (Composition) API 的一大特点是“非常灵活”,但也因为非常灵活,每个开发都有自己的想法。加上项目的持续迭代导致我们的代码…

利用开源库Triangle对二维边界点数组进行三角化

将Triangle的参数开关设置具象化前言 将我几年前还是“小小小白”时(目前将自己定义为“小白”),编译Triangle库时的场景记录了下来,那时候算是才开始接触开源项目,很多东西都不懂,本着一颗不会不懂就瞎折腾的精神,一路走来,之前在cnblog自己的另一个账号也记录过,现在…

postman参数化

生命不断追求不止

Windows下编译Triangle

将我几年前还是小小白时,编译Triangle库时的场景记录了下来前言 将我几年前还是“小小小白”时(目前将自己定义为“小白”),编译Triangle库时的场景记录了下来,那时候算是才开始接触开源项目,很多东西都不懂,本着一颗不会不懂就瞎折腾的精神,一路走来,之前在cnblog自己…

LINUX下编译Triangle

将我几年前还是小小白时,编译Triangle库时的场景记录了下来前言 将我几年前还是“小小小白”时(目前将自己定义为“小白”),编译Triangle库时的场景记录了下来,那时候算是才开始接触开源项目,很多东西都不懂,本着一颗不会不懂就瞎折腾的精神,一路走来,之前在cnblog自己…