当前位置: 首页 > news >正文

算法刷题笔记 染色法判定二分图(染色法例题 C++实现)

文章目录

    • 题目描述
    • 二分图介绍和基本思路
    • 实现代码(C++)

题目描述

  • 给定一个n个点m条边的无向图,图中可能存在重边和自环。
  • 请你判断这个图是否是二分图。

输入格式

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

输出格式

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

数据范围

  • 1 ≤ n,m ≤ 10^5

二分图介绍和基本思路

  • 二分图的定义:一种特殊的无向图,其顶点集可以划分为两个不相交的子集,使得每一条边都恰好连接两个子集中的顶点,即每一条边都是跨集合的。
  • 二分图判定定理:一个图是二分图当且仅当图中不含有边数为奇数的环。
  • 染色法判定二分图的思想:在深度优先搜索(DFS)的过程中对图中的顶点进行染色,如果染色的过程中任何两个相邻的顶点被染成了相同的颜色,则这个图就不是二分图,否则该图就是二分图。

实现代码(C++)

#include <cstdio>
#include <vector>
using namespace std;// 【辅助常量定义】无向图中的点个数上限
const int N = 100010;// 【变量定义】无向图中点的个数和边的条数
int n, m;
// 【变量定义】无向边的两个端点的编号
int u, v;
// 【变量定义】用于存储无向边信息的邻接表
vector<int> edges[N];
// 【变量定义】用于记录二分图判定的结果
bool result;
// 【变量定义】用于记录哪些点被染色了(初始所有元素都为0,表示所有点都未被染色)
int colored[N];// 【函数定义】用于给无向图中指定编号的点和与其可以连接的点进行染色的函数
bool coloring(int number, int color)
{// 【判定阶段】如果该点没有进行染色,则对其以及与其相连的点进行染色if(colored[number] == 0) {// 首先对该点进行染色colored[number] = color;// 对与该点相连的顶点进行染色(当前顶点是颜色1则染颜色2,否则染颜色1)for(int node : edges[number]) {if(coloring(node, 3 - color) == false) return false;}// 判定可以染色return true;}// 如果该点已经完成了染色,则判定其染色结果与本次待染的颜色是否矛盾,如果矛盾则返回falseelse{if(colored[number] != color) return false;}
}// 【函数定义】用于判定一张无向图是否是二分图的函数
bool judge_graph(void)
{// 【点的遍历】顺序遍历无向图中的每一个点,并对该点所有连接的点进行染色(染第一种颜色)for(int i = 1; i <= n; ++ i){// 【判定阶段】如果当前点还没有进行染色,则对该点以及与该点连接的点进行染色// 如果染色过程中发生矛盾,则输出结果if(colored[i] == 0) if(coloring(i, 1) == false) return false;}// 如果成功完成了对无向图中所有点的染色,则说明该图是二分图return true;
}int main(void)
{// 【变量输入】输入无向图中点的个数和边的条数scanf("%d%d", &n, &m);// 【变量输入】输入无向图中的每一条边for(int i = 0; i < m; ++ i){scanf("%d%d", &u, &v);// 使用邻接表来存储无向边的信息edges[u].push_back(v);edges[v].push_back(u);}// 【获取结果】使用自定义的函数判定该无向图是否是二分图result = judge_graph();// 【结果输出】根据结果输出该无向图是否是二分图if(result == true) printf("Yes");else printf("No");return 0;
}

相关文章:

算法刷题笔记 染色法判定二分图(染色法例题 C++实现)

文章目录 题目描述二分图介绍和基本思路实现代码&#xff08;C&#xff09; 题目描述 给定一个n个点m条边的无向图&#xff0c;图中可能存在重边和自环。请你判断这个图是否是二分图。 输入格式 第一行包含两个整数n和m。接下来m行&#xff0c;每行包含两个整数u和v&#xf…...

在Ubuntu上安装OpenBLAS和Eigen

安装 openblas 直接使用 apt-get 命令即可安装&#xff1a; sudo apt-get install libopenblas-dev检查是否安装成功&#xff0c;可以用下面的示例代码 example.cpp&#xff1a; #include <stdio.h> #include <stdlib.h> #include "cblas.h"int main(…...

Vue前端面试基础(一)

Vue面试题目详解可以涵盖多个方面&#xff0c;从基础知识到高级特性&#xff0c;再到实际应用和性能优化等。以下是一些常见的Vue面试题目及其详解&#xff1a; 1. Vue双向绑定原理 详解&#xff1a; Vue的双向绑定原理是通过数据劫持结合发布者-订阅者模式实现的。Vue在内部…...

使用Gitlab实现monorepo多项目CICD

CI/CD是什么 CI/CD&#xff08;Continuous Intergration/Continuous Delpoy&#xff09;&#xff0c;即持续集成/持续部署&#xff0c;或称为持续集成/持续交付&#xff0c;作为一套面向开发和运维团队的解决方案&#xff0c;CI/CD 主要解决集成新代码和向用户频繁交付应用的问…...

设计模式实战:银行账户管理系统的设计与实现

问题描述 设计一个银行账户管理系统,支持不同类型的账户(如储蓄账户、支票账户)进行存取款操作,并能够在账户余额发生变化时通知相关观察者(如用户、银行系统)。系统需要确保账户操作的灵活性和可扩展性。 设计分析 策略模式 策略模式定义了一系列算法,并将每个算法…...

⭕️【论文阅读】《Interactive Class-Agnostic Object Counting》

[2309.05277] Interactive Class-Agnostic Object Counting (arxiv.org) code&#xff1a; cvlab-stonybrook/ICACount: [ICCV23] Official Pytorch Implementation of Interactive Class-Agnostic Object Counting (github.com) 目录 Abstract Abstract 我们提出了一个新…...

高效的编程学习方法和技巧

编程小白如何成为大神&#xff1f;大学新生的最佳入门攻略 编程已成为当代大学生的必备技能&#xff0c;但面对众多编程语言和学习资源&#xff0c;新生们常常感到迷茫。如何选择适合自己的编程语言&#xff1f;如何制定有效的学习计划&#xff1f;如何避免常见的学习陷阱&…...

sublime text插件开发

手工开发了一些ST的py插件&#xff0c;记录过程中遇到的一些问题。 ST3/ST4 begin_edit问题 报错&#xff1a; begin_edit() missing 2 required positional arguments: edit_token and cmdST3时已经不能直接调view.begin_edit方法了&#xff0c;需要通过runCommandTextComm…...

【Linux网络】网络层协议:IP

本篇博客整理了 TCP/IP 分层模型中网络层的 IP 协议&#xff0c;旨在让读者更加深入理解网络协议栈的设计和网络编程。 目录 一、网络层 二、IP 报头 1&#xff09;报头与有效载荷的分离 2&#xff09;有效载荷的上交 3&#xff09;源 IP 与目的 IP 4&#xff09;生存时间…...

分布式接口文档聚合,Solon 是怎么做的?

1、分布式接口文档聚合&#xff0c;是什么&#xff1f; 如果你有 “22” 个不同的服务&#xff08;比如微服务&#xff09;&#xff0c;每个服务都有自己的接口文档。每个服务的文档各自打开&#xff0c;估计你会觉得很麻烦的&#xff1f; 再如果&#xff0c;它们是用 openap…...

多尺度病理图像纹理特征作为肺腺癌预后预测的新指标|文献精读·24-08-09

小罗碎碎念 这一期推文分享的文献是2022年发表于 Journal of Translational Medicine 的一篇文章&#xff0c;目前IF6.1。 这篇文章值得刚入门病理AI领域的老师/同学仔细研读&#xff0c;因为思路清晰&#xff0c;该讲到的流程基本都涉及了&#xff0c;详细讲述了病理图像的各种…...

RAG+Agent项目实践系列:基于本地菜谱知识库的大语言模型RAG+Agent的解决方案设计和实现

RAG+Agent项目实践系列:基于本地菜谱知识库的大语言模型RAG+Agent的解决方案设计和实现 为 A 项目构建一个基于菜谱知识库的问答机器人,由业务方提供一系列菜谱知识库和公司概况介绍材料,根据这些知识库要求实现一个问答机器人: 实现用户对于机器人自我身份和公司情况的回…...

JupyterNotebook添加Anaconda中已有的虚拟环境

比如&#xff0c;在Acaconde中存在一个我已经配置好的虚拟环境pose,现在我想在Jupyter中使用它 那么可以使用ipython kernel install --user --name 你要添加的环境 添加到Jupyter中。 对于Jupyter中已有的代码&#xff0c;就可以在Kernel - chanage kernel中改变内核。...

利用vscode-icons-js在Vue3项目中实现文件图标展示

背景&#xff1a; 在开发文件管理系统或类似的项目时&#xff0c;我们常常需要根据文件类型展示对应的文件图标&#xff0c;这样可以提高用户体验。本文将介绍如何在Vue3项目中利用vscode-icons-js库&#xff0c;实现类似VSCode的文件图标展示效果。 先看效果&#xff1a; 一…...

某赛通电子文档安全管理系统 CDGAuthoriseTempletService1 SQL注入漏洞复现(XVE-2024-19611)

0x01 产品简介 某赛通电子文档安全管理系统(简称:CDG)是一款电子文档安全加密软件,该系统利用驱动层透明加密技术,通过对电子文档的加密保护,防止内部员工泄密和外部人员非法窃取企业核心重要数据资产,对电子文档进行全生命周期防护,系统具有透明加密、主动加密、智能…...

做个一套C#面试题

1.int long float double 分别是几个字节 左到右范围从小到大&#xff1a;byte->short->int->long->float->double 各自所占字节大小&#xff1a;1字节、2字节、4字节、8字节、4字节、8字节 2.System.Object四个公共方法的申明 namespace System {//// 摘要…...

【ML】Pre-trained Language Models及其各种微调模型的实现细节和特点

Pre-trained Language Models及其各种微调模型的实现细节和特点 1. Pre-trained Language Models2. semi-supervised Learning3. zero-shot4. Parameter-Efficient Fine-Tuning4.1 含义&#xff1a;4.2 实现方式&#xff1a; 5. LoRA5.1 LoRA 的主要特点&#xff1a;5.2 LoRA 的…...

YARN单机和集群环境部署教程

目录 一、YARN 单机环境部署1. 环境准备2. 安装 Java3. 下载并安装 Hadoop4. 配置环境变量5. 配置 Hadoop配置 hadoop-env.sh配置 core-site.xml配置 hdfs-site.xml配置 yarn-site.xml配置 mapred-site.xml 6. 格式化 HDFS7. 启动 Hadoop 和 YARN8. 验证 YARN9. 运行一个简单的…...

Android SurfaceFlinger——Vsync信号发送(五十二)

通过上一篇文章我们创建了一个 EventThread 线程,并且它持有了 SurfaceFlinger 中 resyncWithRateLimit() 方法的指针。这里我们主要来看一下 EventThread 对信号的处理。 一、发送Vsync信号 当 SurfaceFlinger 执行完 queueBuffer() 方法之后,通过 onFrameAvailable 又会回…...

零基础5分钟上手亚马逊云科技AWS核心云架构知识-用S3桶托管静态网页

简介&#xff1a; 小李哥从今天开始将开启全新亚马逊云科技AWS云计算知识学习系列&#xff0c;适用于任何无云计算或者亚马逊云科技技术背景的开发者&#xff0c;让大家0基础5分钟通过这篇文章就能完全学会亚马逊云科技一个经典的服务开发架构。 我将每天介绍一个基于亚马逊云…...

手游刚开服就被攻击怎么办?如何防御DDoS?

开服初期是手游最脆弱的阶段&#xff0c;极易成为DDoS攻击的目标。一旦遭遇攻击&#xff0c;可能导致服务器瘫痪、玩家流失&#xff0c;甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案&#xff0c;帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

Spark 之 入门讲解详细版(1)

1、简介 1.1 Spark简介 Spark是加州大学伯克利分校AMP实验室&#xff08;Algorithms, Machines, and People Lab&#xff09;开发通用内存并行计算框架。Spark在2013年6月进入Apache成为孵化项目&#xff0c;8个月后成为Apache顶级项目&#xff0c;速度之快足见过人之处&…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统

医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上&#xff0c;开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识&#xff0c;在 vs 2017 平台上&#xff0c;进行 ASP.NET 应用程序和简易网站的开发&#xff1b;初步熟悉开发一…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

大型活动交通拥堵治理的视觉算法应用

大型活动下智慧交通的视觉分析应用 一、背景与挑战 大型活动&#xff08;如演唱会、马拉松赛事、高考中考等&#xff09;期间&#xff0c;城市交通面临瞬时人流车流激增、传统摄像头模糊、交通拥堵识别滞后等问题。以演唱会为例&#xff0c;暖城商圈曾因观众集中离场导致周边…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止

<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet&#xff1a; https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

大学生职业发展与就业创业指导教学评价

这里是引用 作为软工2203/2204班的学生&#xff0c;我们非常感谢您在《大学生职业发展与就业创业指导》课程中的悉心教导。这门课程对我们即将面临实习和就业的工科学生来说至关重要&#xff0c;而您认真负责的教学态度&#xff0c;让课程的每一部分都充满了实用价值。 尤其让我…...

Caliper 配置文件解析:fisco-bcos.json

config.yaml 文件 config.yaml 是 Caliper 的主配置文件,通常包含以下内容: test:name: fisco-bcos-test # 测试名称description: Performance test of FISCO-BCOS # 测试描述workers:type: local # 工作进程类型number: 5 # 工作进程数量monitor:type: - docker- pro…...