图论——二分图

图论——二分图

二分图通俗解释

有一个图,将顶点分成两类,边只存在不同类顶点之间,同类顶点之间设有边。称图 G 为二部图,或称二分图,也称欧图。

在这里插入图片描述

性质

  • 二分图不含有奇数环
  • 图中没有奇数环,一定可以转换为二分图

判断二分图——染色法(dfs)

可以用二染色方式染色,那么就是二分图

代码
输入格式

第一行包含两个整数 n 和 m。

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

输出格式

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

#include <cstring>
#include <iostream>using namespace std;const int N = 1e5 + 10, M = 2e5 + 10;// 链式前向星 
int h[N], e[M], ne[M], idx;void add(int a, int b) {e[idx] = b;ne[idx] = h[a];h[a] = idx ++;
}// 各个点的颜色,0 未染色,1 是红色,2 是黑色 
int color[N];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;}else if (color[j] == c)	return false;}return true;
}int main() {memset(h, -1, sizeof h);int n, m;cin >> n >> m;while (m --) {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)) {flag = false;break;}}}if (flag)	puts("Yes");else	puts("No");return 0;
}

二分图的最大匹配——匈牙利算法(详细证明请见《算法导论》)

匹配:在图论中,一个「匹配」是一个边的集合,其中任意两条边都没有公共顶点。

最大匹配:一个图所有匹配中,所含匹配边数最多的匹配,称为这个图的最大匹配

完美匹配:如果一个图的某个匹配中,所有的顶点都是匹配点,那么它就是一个完美匹配。

交替路:从一个未匹配点出发,依次经过非匹配边、匹配边、非匹配边…形成的路径叫交替路。

增广路:从一个未匹配点出发,走交替路,如果途径另一个未匹配点(出发的点不算),则这条交替 路称为增广路(agumenting path)。

代码
输入格式

第一行包含三个整数 n1、 n2 和 m。

接下来 m 行,每行包含两个整数 u 和 v,表示左半部点集中的点 u 和右半部点集中的点 v 之间存在一条边。

输出格式

输出一个整数,表示二分图的最大匹配数。

#include <cstring>
#include <iostream>
#include <algorithm>using namespace std;const int N = 510, M = 100010;int h[N], e[M], ne[M], idx;void add(int a, int b) {e[idx] = b;ne[idx] = h[a];h[a] = idx ++;
}int match[N];
bool st[N];bool find(int x) {for (int i = h[x]; i != -1; i = ne[i]) {int j = e[i];if (!st[j]) {st[j] = true;if (!match[j] || find(match[j])) {match[j] = x;return true;}}}return false;
}int main() {memset(h, -1, sizeof h);int n1, n2, m;cin >> n1 >> n2 >> m;while (m --) {int a, b;cin >> a >> b;add(a, b);}int res = 0;for (int i = 1; i <= n1; i ++) {memset(st, 0, sizeof st);if (find(i))	res ++;}cout << res << endl;return 0;
}

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

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

相关文章

OpenAI Q* (Q Star)简单介绍

一、Q Star 名称由来 Q* 的两个可能来源如下&#xff1a; 1&#xff09;Q 可能是指 "Q-learning"&#xff0c;这是一种用于强化学习的机器学习算法。 Q 名称的由来*&#xff1a;把 "Q*"想象成超级智能机器人的昵称。 Q 的意思是这个机器人非常善于做决定…

pytest-fixtured自动化测试详解

fixture的作用 1.同unittest的setup和teardown,作为测试前后的初始化设置。 fixture的使用 1.作为前置条件使用 2.fixture的的作用范围 1.作为前置条件使用 pytest.fixture() def a():return 3def test_b(a):assert a3 2.fixture的作用范围 首先实例化更高范围的fixture…

ElasticSearch高可用集群搭建

1.环境准备 本文已三个节点&#xff08;服务器&#xff09;为例&#xff0c;准备三台服务器 2.搭建过程 1).三台服务器分别搭建es &#xff08;ES8JDK17&#xff09; 上传安装包和解压 tar -zxvf elasticsearch-8.4.1-linux-x86_64.tar.gz新建一个用户&#xff0c;安全考虑…

【Python-第三方库-pyautogui】随笔

pyautogui&#xff08;PythonAutoGUI&#xff09;随笔 常用 pyautogui.position() 【功能】 获取鼠标所在处的坐标&#xff1b; 【实操】 代码01 import pyautoguiprint(type(pyautogui.position())) while True:print("\r" str(pyautogui.position()), end"…

Rust语言GUI库之gtk安装

文章目录 工具链安装管理软件vcpkgvcpkg介绍安装vcpkg 安装gtk遇到的问题Rust其他依赖package-confg 工具链安装管理软件vcpkg vcpkg介绍 在使用C/C编写项目时, 引用第三方库是很麻烦的事, 需要手动下载源码然后编译最后再添加到项目里&#xff0c;配置头文件、lib、dll&…

应用程序映射的 5 个安全优势

现代企业依靠无数的软件应用程序来执行日常运营。这些应用程序相互连接并协同工作以提供所需的服务。了解这些应用程序如何相互交互以及底层基础设施对于任何组织都至关重要。这就是应用程序映射概念的用武之地。 顾名思义&#xff0c;应用程序映射是创建应用程序架构&#xf…

MTK Android P Sensor架构(二)

不过不同的芯片平台&#xff0c;kernel层中的sensor框架是不同的&#xff0c;这里针对的是mt8167s平台。不过这里提醒一下&#xff0c;MTK平台应该从kernel 3.x版本后就不支持温湿度传感器的框架了&#xff0c;不过幸好他们还保留了框架的雏形在&#xff0c;我们需要自行解决一…

Linux mv命令教程:如何高效地移动和重命名文件(附案例详解和注意事项)

Linux mv命令介绍 mv命令是Linux系统中的一个基本命令&#xff0c;全称为move&#xff0c;主要用于移动文件或者目录&#xff0c;也可以用来对文件或者目录进行重命名。 Linux mv命令适用的Linux版本 mv命令在所有的Linux发行版中都是可用的&#xff0c;包括但不限于Ubuntu,…

基于rsync+inotify-tools 同步geo主从节点的artifacts文件

文章目录 1. 背景2. 操作2.1 geo主节点查看仓库的路径2.2 安装 inotify-tools2.3 主从免密2.4 编写同步脚本2.5 同步文件 3. 验证 1. 背景 由于某个repo的主从artifacts目录偏差非常严重(主节点100G&#xff0c;从节点10G)&#xff0c;为了保证主从目录数据的一致性&#xff0…

skynet 中 mongo 模块运作的底层原理解析

文章目录 前言总览全流程图涉及模块关系连接数据库函数调用流程图数据库操作函数调用流程图涉及到的代码文件 建立连接SCRAMSASL 操作数据库结语参考链接 前言 这篇文章总结 skynet 中 mongo 的接入流程&#xff0c;代码解析&#xff0c;读完它相信你对 skynet 中的 mongo 调用…

JMeter直连数据库

JMeter直连数据库 使用场景操作步骤 使用场景 用作请求的参数化 登录时需要的用户名&#xff0c;密码可以从数据库中查询获取 用作结果的断言 添加购物车下订单&#xff0c;检查接口返回的订单号&#xff0c;是否与数据库中生成的订单号一致 清理垃圾数据 添加商品后&#xff…

汽车IVI中控开发入门及进阶(十一):ALSA音频

前言 汽车中控也被称为车机、车载多媒体、车载娱乐等,其中音频视频是非常重要的部分,音频比如播放各种格式的音乐文件、播放蓝牙接口的音乐、播放U盘或TF卡中的音频文件,如果有视频文件也可以放出音频,看起来很简单,在windows下音乐播放器很多,直接打开文件就能播放各…

生产派工自动化:MES系统的关键作用

随着制造业的数字化转型和智能化发展&#xff0c;生产派工自动化成为了提高生产效率、降低成本&#xff0c;并实现优质产品生产的关键要素之一。制造执行系统&#xff08;MES&#xff09;在派工自动化中发挥着重要作用&#xff0c;通过实时数据采集和智能调度&#xff0c;优化生…

项目一:IIC读写EEPROM AT24C02

回头想了想在工作中调过的EEPROM还挺多的&#xff0c;有M24M02 、M28010 、AT24C02等&#xff0c;今天讲一下AT24C02吧 一、AT24C02简介 1.1 特点 文档已经上传了&#xff0c;需要的同学可以自行下载哈&#xff0c;晚点我会把下载链接附上来。 我大概照着文档翻译了一下&am…

C# Dictionary 利用 ContainsValue 查询指定值是否已经存在

.NET Framework : 4.7.2IDE : Visual Studio Community 2022OS : Windows 10 x64typesetting : Markdownblog : niaoge.blog.csdn.net 简介 本文介绍如何查询Dictionary 中某个值是否已经存在。 ContainsValue 命名空间: System.Collections.Generic 程序集: System.Collect…

排序算法-快速排序

1.快速排序&#xff08;递归&#xff09; 快速排序是 Hoare 于 1962 年提出的一种二叉树结构的交换排序方法&#xff0c;其基本思想为&#xff1a; 任取待排序元素序列中 的某元素作为基准值&#xff0c;按照该排序码将待排序集合分割成两子序列&#xff0c;左子序列中所有元素…

已经写完的论文怎么降低查重率 papergpt

大家好&#xff0c;今天来聊聊已经写完的论文怎么降低查重率&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff1a; 已经写完的论文怎么降低查重率 背景介绍 在学术界&#xff0c;论文的查重率是评价论文质量的…

Command ‘npm‘ not found, but can be installed with:sudo apt install npm 解决方案

问题描述 今天在执行 npm install -g npx 报错 Command npm not found, but can be installed with: sudo apt install npm 解决方案 sudo apt-get remove npm sudo apt-get remove nodejs-legacy sudo apt-get remove nodejs sudo rm /usr/bin/node sudo apt-get install …

mysql的ON DELETE CASCADE 和ON DELETE RESTRICT区别

​​ON DELETE CASCADE​​​ 和 ​​ON DELETE RESTRICT​​ 是 MySQL 中两种不同的外键约束级联操作。它们之间的主要区别在于当主表中的记录被删除时&#xff0c;子表中相关记录的处理方式。 ON DELETE CASCADE: 当在主表中删除一条记录时&#xff0c;所有与之相关的子表中…

[Spring源码] 浅析 SpringApplication`的构造方法

文章目录 SpringApplication的构造方法获取 Bean Definition 源推断应用类型添加 ApplicationContext 初始化器添加事件监听器主类推断 SpringApplication的构造方法 Springboot的主启动类为&#xff1a; SpringBootApplication public class BootApplication {public static…