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

【C++算法竞赛 · 图论】图论基础

前言

图论基础

图的相关概念

图的定义

图的分类

按数量分类:

按边的类型分类:

边权

简单图

路径

连通

无向图

有向图

图的存储

方法概述

代码

复杂度


前言

图论(Graph theory),是 OI 中的一样很大的一个模块,围绕它有很多高难度的算法以及高级的概念。这篇文章将介绍关于图论的一部分基础概念(干货满满!),话不多说,步入正题——

图论基础

(干货太多了,建议先收藏!)

图的相关概念

图的定义

图(graph)是一个二元组 G = (V(G), E(G))。其中 V(G) 是非空集,称为 点集(vertex set),对于 V 中的每个元素,我们称其为 顶点(vertex)或 节点(node),简称 E(G) 为 V(G) 各结点之间边的集合,称为 边集(edge set)

我们一般用 G = (V, E) 表示图。

举个例子:

这就是一张图,1,2,3,4,5 就是它的节点。

推荐一个网站:Cs Academy

这里有十分好用的图编辑器,可以帮你加强理解图论!

图的分类

按数量分类:

V, E 都是有限集合时,称 G 为 有限图

V 或 E 是无限集合时,称 G 为 无限图

按边的类型分类:

图有多种,包括 无向图 (undirected graph)有向图 (directed graph)混合图 (mixed graph) 等

若为无向图,则图中的每个元素为一个无序二元组 (u, v),称作 无向边 (undirected edge),简称 边 (edge),其中 u, v ∈ V。设 e = (u, v),则 uv 称为 e 的 端点 (endpoint)

若为有向图,则图中的每一个元素为一个有序二元组 (u, v),有时也写作 u → v,称作 有向边 (directed edge) 或 弧 (arc),在不引起混淆的情况下也可以称作 边 (edge)。设 e = u → v ,则此时 称为 e 的 起点 (tail)v 称为 e 的 终点 (head),起点和终点也称为 e 的 端点 (endpoint)。并称 uv 的直接前驱,v 是 u 的直接后继。

若为混合图,则图中既有 有向边,又有 无向边

还拿这张图来说,这是一个无向图

这就是一张有向图

边权

若图的每条边都被赋予一个数作为该边的 ,则称这张图为 赋权图。如果这些权都是正实数,就称为 正权图

这张图就是一张 赋权图

简单图

自环 (loop):对 E 中的边 e = (u,v) ,若 u = v ,则 e 被称作一个自环。

重边 (multiple edge):若 E 中存在两个完全相同的元素(边)e1,e2 ,则它们被称作(一组)重边。

简单图 (simple graph):若一个图中没有自环和重边,它被称为简单图。具有至少两个顶点的简单无向图中一定存在度相同的结点。

如果一张图中有自环或重边,则称它为 多重图 (multigraph)

与一个顶点 v 关联的边的条数称作该顶点的 度 (degree),记作 d(v)。特别地,对于边 (v, v),则每条这样的边要对 d(v) 产生 2 的贡献。

对于无向简单图,有 d(v) = |N(v)|

推论:在任意图中,度数为奇数的点必然有偶数个。(一笔画问题应该了解过吧)

d(v) = 0,则称 v 为 孤立点 (isolated vertex)

若 d(v) = 1,则称 v 为 叶节点 (leaf vertex)/悬挂点 (pendant vertex)

若 2 | d(v),则称 v 为 偶点 (even vertex),否则为 奇点 (odd vertex)

d(v) = |V| - 1,则称 v 为 支配点 (universal vertex)

(这些概念了解就行了,不需要特别去记)

对一张图,所有节点的度数的最小值称为 最小度 (minimum degree),最大值称为 最大度 (maximum degree)。

在有向图中,以一个顶点为起点的边的条数称为该顶点的 出度 (out-degree),以一个顶点  为终点的边的条数称为该节点的 入度 (in-degree)

如果给定一个序列 a,可以找到一个图 G,以其为度数列,则称 a 是 可图化 的。

如果给定一个序列 a,可以找到一个简单图 G,以其为度数列,则称 a 是 可简单图化 的。

路径

途径 (walk):途径是连接一连串顶点的边的序列,可以为有限或无限长度。形式化地说,一条有限途径 w 是一个边的序列 e1,e2,...,ek,使得存在一个顶点序列 v0,v1,...,vk 满足 ei = (v i-1,v i),其中 i ∈ [1, k] 。这样的途径可以简写为 v0  → v1 → v2 → ... → vk 。通常来说,边的数量 k 被称作这条途径的 长度(如果边是带权的,长度通常指途径上的边权之和,题目中也可能另有定义)。

看不懂?(我也看不懂)为了更好地理解,可以把一张图当作一个地图,节点就是车站,边就是路,那么路径就是从一个车站到另一个车站的路线。如果这张图是赋权图,也就是说车站之间有了距离,那么路径的 长度 就是车站到车站的路线的长度。

回路 (circuit):对于一条路径 w,若 v0 = vk,则称 w 是一条回路。

连通

无向图

对于一张无向图 G = (V,E),对于 u,v ∈ V,若存在一条途径使得 v0 = u, vk = v,则称 uv 是 连通的 (connected)。由定义,任意一个顶点和自身连通,任意一条边的两个端点连通。

若无向图 G = (V,E),满足其中任意两个顶点均连通,则称 G 是 连通图 (connected graph),这一性质称作 连通性 (connectivity)

有向图

对于一张有向图 G = (V,E),对于 u,v ∈ V,若存在一条途径使得 v0 = u, vk = v, 则称 u 可达 v。由定义,任意一个顶点可达自身,任意一条边的起点可达终点。(无向图中的连通也可以视作双向可达。)

若一张有向图的节点两两互相可达,则称这张图是 强连通的 (strongly connected)

若一张有向图的边替换为无向边后可以得到一张连通图,则称原来这张有向图是 弱连通的 (weakly connected)

到这,你已经看过了图的大部分概念。全是干货,如果还没理解,可以收藏起来慢慢看!

图的存储

本文会介绍最常用的存储方法,也就是:直接存边

方法概述

使用一个数组来存边,数组中的每个元素都包含一条边的起点与终点(带边权的图还包含边权)。

代码

struct Edge {int u, v;
};
vector<Edge> e;

复杂度

查询是否存在某条边:O(m)

遍历一个点的所有出边:O(m) 

遍历整张图:O(nm)

空间复杂度:O(m)


干货太多,整理得肝疼,求个点赞收藏不过分吧!(求求了!)

本文就到这里,下次再见!

相关文章:

【C++算法竞赛 · 图论】图论基础

前言 图论基础 图的相关概念 图的定义 图的分类 按数量分类&#xff1a; 按边的类型分类&#xff1a; 边权 简单图 度 路径 连通 无向图 有向图 图的存储 方法概述 代码 复杂度 前言 图论&#xff08;Graph theory&#xff09;&#xff0c;是 OI 中的一样很大…...

Java解析实体类的属性和属性注释

前言 获取某个类的属性&#xff08;字段&#xff09;是我们经常都会碰到的&#xff0c;通常我们是通过反射来获取的。 但是有些特殊情况下&#xff0c;我们不仅要获取类的属性&#xff0c;还需要获取属性注释。这种情况下&#xff0c;我们只能通过注解去获取注释。可以自己定…...

机器学习KNN最邻近分类算法

文章目录 1、KNN算法简介2、KNN算法实现2.1、调用scikit-learn库中KNN算法 3、使用scikit-learn库生成数据集3.1、自定义函数划分数据集3.2、使用scikit-learn库划分数据集 4、使用scikit-learn库对鸢尾花数据集进行分类5、什么是超参数5.1、实现寻找超参数5.2、使用scikit-lea…...

分享一个Python爬虫入门实例(有源码,学习使用)

一、爬虫基础知识 Python爬虫是一种使用Python编程语言实现的自动化获取网页数据的技术。它广泛应用于数据采集、数据分析、网络监测等领域。以下是对Python爬虫的详细介绍: 架构和组成:下载器:负责根据指定的URL下载网页内容,常用的库有Requests和urllib。解析器:用于解…...

算法:树形dp(树状dp)

文章目录 一、树形DP的概念1.基本概念2.解题步骤3.树形DP数据结构 二、典型例题1.LeetCode&#xff1a;337. 打家劫舍 III1.1、定义状态转移方程1.2、参考代码 2.ACWing&#xff1a;285. 没有上司的舞会1.1、定义状态转移方程1.2、拓扑排序参考代码1.3、dfs后序遍历参考代码 一…...

SQL语句学习+牛客基础39SQL

什么是SQL&#xff1f; SQL (Structured Query Language:结构化查询语言) 是用于管理关系数据库管理系统&#xff08;RDBMS&#xff09;。 SQL 的范围包括数据插入、查询、更新和删除&#xff0c;数据库模式创建和修改&#xff0c;以及数据访问控制。 SQL语法 数据库表 一个…...

竞赛常考的知识点大总结(五)动态规划

DP问题的性质 动态规划&#xff08;Dynamic Programming&#xff0c;DP&#xff09;是指在解决动态规划问题时所依赖的一些基本特征和规律。动态规划是一种将复杂问题分解为更小子问题来解决的方法&#xff0c;它适用于具有重叠子问题和最优子结构性质的问题。动态规划问题通常…...

如何在 Mac 上恢复已删除的数据

如果您丢失了 Mac 上的数据&#xff0c;请不要绝望。恢复数据比您想象的要容易&#xff0c;并且有很多方法可以尝试。 在 Mac 上遭受数据丢失是每个人都认为永远不会发生在他们身上的事情之一......直到它发生。不过&#xff0c;请不要担心&#xff0c;因为您可以通过多种方法…...

Java笔试题总结

HashSet子类依靠()方法区分重复元素。 A toString(),equals() B clone(),equals() C hashCode(),equals() D getClass(),clone() 答案:C 解析: 先调用对象的hashcode方法将对象映射为数组下标,再通过equals来判断元素内容是否相同 以下程序执行的结果是&#xff1a; class X{…...

github本地仓库push到远程仓库

1.从远程仓库clone到本地 2.生成SSH秘钥&#xff0c;为push做准备 在Ubuntu命令行输入一下内容 [rootlocalhost ~]# ssh-keygen -t rsa < 建立密钥对&#xff0c;-t代表类型&#xff0c;有RSA和DSA两种 Generating public/private rsa key pair. Enter file in whi…...

Error: TF_DENORMALIZED_QUATERNION: Ignoring transform forchild_frame_id

问题 运行程序出现&#xff1a; Error: TF_DENORMALIZED_QUATERNION: Ignoring transform for child_frame_id “odom” from authority “unknown_publisher” because of an invalid quaternion in the transform (0.0 0.0 0.0 0.707) 主要是四元数没有归一化 Eigen::Quatern…...

Linux从入门到精通 --- 2.基本命令入门

文章目录 第二章&#xff1a;2.1 Linux的目录结构2.1.1 路径描述方式 2.2 Linux命令入门2.2.1 Linux命令基础格式2.2.2 ls命令2.2.3 ls命令的参数和选项2.2.4 ls命令选项的组合使用 2.3 目录切换相关命令2.3.1 cd切换工作目录2.3.2 pwd查看当前工作目录2.4 相对路径、绝对路径和…...

Redis常用命令补充和持久化

一、redis 多数据库常用命令 1.1 多数据库间切换 1.2 多数据库间移动数据 1.3 清除数据库内数据 1.4 设置密码 1.4.1 使用config set requirepass yourpassword命令设置密码 1.4.2 使用config get requirepass命令查看密码 二、redis高可用 2.1 redis 持久化 2.1.1 持…...

【记录】海康相机(SDK)二次开发时的错误码

海康相机&#xff08;SDK&#xff09;二次开发时的错误码 在进行海康sdk二次开发的时候&#xff0c;经常碰到各种错误&#xff0c;遂结合官方文档和广大网友的一些经验&#xff0c;把这些错误码记录一下&#xff0c;方便查找。笔者使用的SDK版本是HCNetSDKV6.1.9.4。 错误类型…...

端盒日记Day02

JS 本本本本本地存储 localStorage 作用&#xff1a;可以将数据永久存储在本地&#xff08;用户电脑&#xff09;&#xff0c;除非手动删除&#xff0c;否则关闭页面也会存在 特性&#xff1a;a.可多窗口&#xff08;页面&#xff09;共享&#xff08;同一浏览器可以共享&a…...

考研高数(平面图形的面积,旋转体的体积)

1.平面图形的面积 纠正&#xff1a;参数方程求面积 2.旋转体的体积&#xff08;做题时&#xff0c;若以x为自变量不好计算&#xff0c;可以求反函数&#xff0c;y为自变量进行计算&#xff09;...

选择企业邮箱,扬帆迈向商务新纪元!

企业邮箱和个人邮箱不同&#xff0c;它的邮箱后缀是企业自己的域名。企业邮箱供应商一般都提供手机app、桌面端、web浏览器访问等邮箱使用途径。那么什么是企业邮箱&#xff1f;如何选择合适的企业邮箱&#xff1f;好用的企业邮箱应具备无缝迁移、协作、多邮箱管理等功能。 企…...

2024.3.25力扣每日一题——零钱兑换2

2024.3.25 题目来源我的题解方法一 动态规划 题目来源 力扣每日一题&#xff1b;题序&#xff1a;518 我的题解 方法一 动态规划 给定总金额 amount 和数组 coins&#xff0c;要求计算金额之和等于 amount 的硬币组合数。其中&#xff0c;coins的每个元素可以选取多次&#…...

包子凑数【蓝桥杯】/完全背包

包子凑数 完全背包 完全背包问题和01背包的区别就是&#xff0c;完全背包问题每一个物品能取无限次。 思路&#xff1a;当n个数的最大公约数不为1&#xff0c;即不互质时&#xff0c;有无限多个凑不出来的&#xff0c;即n个数都可以表示成kn&#xff0c;k为常数且不为1。当n个…...

口语 4.6

drop the gun :逃避 radically 极大程度地 vastly cognition&#xff1a;认知能力 flaw缺陷 flawless&#xff1a;没有缺陷 interface&#xff1a;接口&#xff0c;交流处 retain&#xff1a;保留 down the rabbit hole&#xff1a;进入未知领域了 wrap your head aro…...

使用Docker 部署jenkins 实现自动化部署

使用Docker部署jenkins实现自动化部署ruoyi-vue docker jenkinsJava jenkinsfilevue jenkinsfileDockerfile 部署脚本Java Dockerfilenginx Dockerfilenginx-dev.conf 使用docker部署Jenkins&#xff0c;项目: https://gitee.com/y_project/RuoYi-Vue 作为部署项目示范 docker…...

golang语言系列:Web框架+路由 之 Gin

云原生学习路线导航页&#xff08;持续更新中&#xff09; 本文是golang语言学习系列&#xff0c;本篇对Gin框架的基本使用方法进行学习 1.Gin框架是什么 Gin 是一个 Go (Golang) 编写的轻量级 http web 框架&#xff0c;运行速度非常快&#xff0c;如果你是性能和高效的追求者…...

春招百题--堆

一、堆的定义 二、堆&#xff08;优先队列&#xff09; 堆通常用于实现优先队列&#xff08;priority_queue&#xff09;&#xff0c;大顶堆相当于元素按从大到小的顺序出队的优先队列。从使用角度来看&#xff0c;我们可以将“优先队列”和“堆”看作等价的数据结构。 堆的…...

全志A40i android7.1 移植wifi驱动的一般流程

一&#xff0c;问题分析 一般情况下移植一款模组&#xff0c;会涉及到驱动&#xff0c;firmware, hal层&#xff0c;方案端的适配。 下面以RTL8723ds为例详细列出移植的通用步骤。 二&#xff0c;移植步骤 1. 移植Wi-Fi驱动 从RTL原厂或者已经支持的其他把内核版本中获取驱动…...

Qt——Qt绘图之QPainter的使用总结(使用paintEvent实现旋转图片效果)

【系列专栏】:博主结合工作实践输出的,解决实际问题的专栏,朋友们看过来! 《项目案例分享》 《极客DIY开源分享》 《嵌入式通用开发实战》 《C++语言开发基础总结》 《从0到1学习嵌入式Linux开发》 《QT开发实战》 《Android开发实战》...

Day83:服务攻防-开发组件安全JacksonFastJson各版本XStreamCVE环境复现

目录 J2EE-组件Jackson-本地demo&CVE 代码执行 (CVE-2020-8840) 代码执行 (CVE-2020-35728&#xff09; J2EE-组件FastJson-本地demo&CVE FastJson < 1.2.24 FastJson < 1.2.47 FastJson < 1.2.80 (利用条件比较苛刻) J2EE-组件XStream-靶场&CVE …...

【QT+QGIS跨平台编译】056:【pdal_kazhdan+Qt跨平台编译】(一套代码、一套框架,跨平台编译)

点击查看专栏目录 文章目录 一、pdal_kazhdan介绍二、pdal下载三、文件分析四、pro文件五、编译实践一、pdal_kazhdan介绍 pdal_kazhdan 是 PDAL(Point Data Abstraction Library)相关的 Kazhdan 算法的实现。PDAL 是一个用于处理和分析点云数据的开源库,而 Kazhdan 算法通常…...

泰坦尼克号幸存者数据分析

泰坦尼克号幸存者数据分析 1、泰坦尼克号数据集2、数据集加载与概览3、泰坦尼克号幸存者数据分析4、哪些人可能成为幸存者&#xff1f; 1、泰坦尼克号数据集 泰坦尼克号的沉没是世界上最严重的海难事故之一&#xff0c;造成了大量的人员伤亡。这是一艘号称当时世界上最大的邮轮…...

Memcached 教程之 PHP 连接 Memcached 服务(十)

PHP 连接 Memcached 服务 在前面章节中我们已经介绍了如何安装 Memcached 服务&#xff0c;接下来我们为大家介绍 PHP 如何使用 Memcached 服务。 PHP Memcache 扩展安装 PHP Memcache 扩展包下载地址&#xff1a;PECL :: Package :: memcache&#xff0c;你可以下载最新稳定…...

【zlm】音视频流与音频流合并的设计

目录 设想一 设想二 方案三 关键技术 测试语句 测试脚本 参考文档 设想一 //开始录制_option.mp4_save_path custom_path;_option.mp4_max_second max_second;vector<Track::Ptr> mytracks getTracks();auto src MediaSource::find( DEFAULT_VHOST, "1&quo…...

企业做网站的费用/推广平台网站

源&#xff1a;JNA调用DLL 介绍 给大家介绍一个最新的访问本机代码的Java框架—JNA。 JNA(Java Native Access)框架是一个开源的Java框架&#xff0c;是SUN公司主导开发的&#xff0c;建立在经典的JNI的基础之上的一个框架。 JNA项目地址&#xff1a;https://jna.dev.java.net/…...

西宁哪家网络公司做网站/网络营销方案设计范文

jmeter中通过jdbc方式连接mysql数据库的配置参考&#xff1a; Database URLjdbc:mysql://ip:port/dbname?useUnicodetrue&allowMultiQueries&characterEncodingUTF-8 JDBC Driver classcom.mysql.jdbc.Driver jmeter中配置截图&#xff1a; 转载于:https://www.cnblog…...

自己注册个公司做网站怎么样/阿里巴巴指数查询

简介 django为用户实现防止跨站请求伪造的功能&#xff0c;通过中间件 django.middleware.csrf.CsrfViewMiddleware 来完成。而对于django中设置防跨站请求伪造功能有分为全局和局部。 全局&#xff1a; 中间件 django.middleware.csrf.CsrfViewMiddleware 局部&#xff1a; cs…...

网站上的幻灯片如何做/seo优化怎么做

一. BluetoothClass简介 1. 继承关系 public final class BluetoothClass extends Object implements Parcelable 该类是final类, 不能被继承, 没有子类; 该类继承了Object类, 实现了Parcelable接口; Parcelable接口 : Java中的序列化方法 : 在Java中序列化有两种方法, 一种是…...

中国建设招标网是什么网站/抖音seo搜索引擎优化

appium目前最新的windows版本是1.4.16&#xff0c;在android8.0.0真机上测试脚本时会报错&#xff1a;command failed shell “ps ‘uiautomator’”。 刚开始以为错误原因是模拟器系统和真机系统版本没对应上&#xff08;小菜&#xff0c;所以在猜原因&#xff09;&#xff0…...

企业的建站方式/广告营销是做什么的

建立多任务模型&#xff0c;并用线程来实现符合POSIX标准的UNIX操作系统提供了线程的控制函数&#xff0c;如&#xff1a;线程的创建和终止、线程之间的互斥、线程之间的同步等。利用这些系统函数可以成功地模拟消息队列&#xff0c;来实现线程间数据共享和同步&#xff0c;以完…...