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

图论(基础)

知识:

顶点,边 | 权,度数

1.图的种类:

有向图 | 无向图

有环 | 无环

联通性

基础1:图的存储(主要是邻接矩阵和邻接表)

例一:B3643 图的存储 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

#include <iostream>using namespace std;int n, m, d[1010];
bool edges[1010][1010];int main()
{cin >> n >> m;for(int i = 1; i <= m; i ++ ){int u, v;cin >> u >> v;edges[u][v] = true;edges[v][u] = true;}for(int i = 1; i <= n; i ++ ){for(int j = 1; j <= n; j ++ ){if(edges[i][j]) {cout << "1 ";d[i] ++;}else cout << "0 "; }cout << endl;}for(int i = 1; i <= n; i ++ ){cout << d[i] << ' ';for(int j = 1; j <= n; j ++ ){if(edges[i][j]) cout << j << ' ';}cout << endl;}return 0;
}

例二:B3613 图的存储与出边的排序 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

该代码须加上快读快写

#include <iostream>
#include <set>
using namespace std;const int N = 5e5 + 10;
int n, m;
set<int> s[N];int main()
{int t;cin >> t;while(t -- ){cin >> n >> m;for(int i = 0; i < m; i ++ ){int a, b;cin >> a >> b;s[a].insert(b);}int j = 0;for(int i = 1; i <= n; i ++ ){for(auto it = s[i].begin(); it != s[i].end(); it ++ )cout << *it << ' ';cout << endl;}}return 0;
}

图的遍历:通常是bfs()、dfs()

复习一下模板活动 - AcWing 活动 - AcWing

例一:P3916 图的遍历 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

因为是找最大值dfs,用了反向建边提高效率,用一个大值去标记多个小值

#include <iostream>
#include <cstring>
using namespace std;const int N = 1e5 + 10, M = 2 * N;
int n, m;
int e[N], ne[N], h[N], idx;
int res[N];void add(int a, int b)
{e[idx] = b, ne[idx] = h[a], h[a] = idx ++;
}void dfs(int u, int maxn)
{res[u] = max(maxn, res[u]);for(int i = h[u]; i != -1; i = ne[i]){int j = e[i];if(!res[j]) dfs(j, maxn);}
}int main()
{cin >> n >> m;memset(h, -1, sizeof h);while(m -- ){int u, v;cin >> u >> v;add(v, u);}for(int i = n; i >= 1; i -- ){//反向建边+遍历 有利于找最大值的效率// 如果是第一次被遍历到一定找到了遍历最大的值//已经被标记过最大值的说明他们下边的最大值也被标记过了if(res[i]) continue;dfs(i, i);}for(int i = 1; i <= n; i ++ ){cout << res[i] << ' ';}return 0;
}

例二:活动 - AcWing 图的层次

肯定要用bfs啦

#include <iostream>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;const int N = 1e5 + 10;
int h[N], e[N], ne[N], idx;
int d[N];
int n,m;
queue<int> q;void add(int a, int b)
{e[idx] = b, ne[idx] = h[a], h[a] = idx ++;
}int bfs()
{memset(d, -1, sizeof d);d[1] = 0;q.push(1);while(q.size()){auto t = q.front();q.pop();for(int i = h[t]; i != -1; i = ne[i]){int j = e[i];if(d[j] == -1){d[j] = d[t] + 1;q.push(j);}}}return d[n];
}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);}cout << bfs() << endl;return 0;
}

例三:P5318 【深基18.例3】查找文献 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

分别用dfs和bfs输出一遍。唯一的难点在于怎么做到 "如果有很多篇文章可以参阅,请先看编号较小的那篇(因此你可能需要先排序)。" 问题不大,排个序就行。

注意用邻接表存图(s存边先处理一下,即排序) 然后处理e[i][]表示i点连接的点

然后就是喜闻乐见的dfs递归一下,bfs一下

#include <iostream>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;const int N = 1e5 + 10;
struct edges
{int a, b;
};
vector<int> e[N]; // e是邻接表,用来遍历
vector<edges> s; // 用来存边
int n, m;
bool st1[N], st2[N];
queue<int> q;bool cmp(edges x, edges y)
{//按照每条边终点从小到大排,终点相同的起点按从小到大排if(x.b == y.b) return x.a < y.a;else return x.b < y.b;
}void bfs()
{q.push(1);st2[1] = true;cout << '1' << ' ';while(q.size()){int t = q.front();q.pop();for(int i = 0; i < e[t].size(); i ++ ){int j = s[e[t][i]].b;if(!st2[j]){st2[j] = true;cout << j << ' ';q.push(j);}}}
}
void dfs(int u)
{st1[u] = true;cout << u << ' ';for(int i = 0; i < e[u].size(); i ++ ){int j = s[e[u][i]].b;if(!st1[j]) dfs(j);}
}int main()
{cin >> n >> m;for(int i = 0; i < m; i ++ ){int a, b;cin >> a >> b;s.push_back((edges){a, b});}sort(s.begin(), s.end(), cmp);//m条边放到e中 for(int i = 0; i < m; i ++ ){e[s[i].a].push_back(i); // e存某个点到其他点的边的编号}// for(int i = 0; i < m; i ++ )// {//     cout << s[i].a << ':' << s[i].b << endl;// }dfs(1);puts("");bfs();return 0;
}

相关文章:

图论(基础)

知识&#xff1a; 顶点&#xff0c;边 | 权&#xff0c;度数 1.图的种类&#xff1a; 有向图 | 无向图 有环 | 无环 联通性 基础1&#xff1a;图的存储&#xff08;主要是邻接矩阵和邻接表&#xff09; 例一&#xff1a;B3643 图的存储 - 洛谷 | 计算机科学教育新生态 (…...

docker的运行原理

Docker 是一个开源的容器化技术,它能够让开发者将应用及其依赖打包到一个轻量级的、可移植的容器中,这个容器可以在几乎任何机器上一致地运行。要了解 Docker 的运行原理,我们首先要理解以下几个核心概念: 容器 (Container): 容器是一个轻量级的、独立的、可执行的软件包,…...

vue自定义键盘

<template><div class"mark" click"isOver"></div><div class"mycar"><div class"mycar_list"><div class"mycar_list_con"><p class"mycar_list_p">车牌号</p>…...

k8s 安装 kubernetes安装教程 虚拟机安装k8s centos7安装k8s kuberadmin安装k8s k8s工具安装 k8s安装前配置参数

k8s采用master, node1, node2 。三台虚拟机安装的一主两从&#xff0c;机器已提前安装好docker。下面是机器配置&#xff0c;k8s安装过程&#xff0c;以及出现的问题与解决方法 虚拟机全部采用静态ip, master 30机器, node1 31机器, node2 32机器 机器ip 192.168.164.30 # ma…...

2023年高教社杯数学建模思路 - 案例:感知机原理剖析及实现

文章目录 1 感知机的直观理解2 感知机的数学角度3 代码实现 4 建模资料 # 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 感知机的直观理解 感知机应该属于机器学习算法中最简单的一种算法&#xff0c;其…...

OTFS-ISAC雷达部分最新进展(含matlab仿真+USRP验证)

OTFS基带参数设置 我将使用带宽为80MHz的OTFS波形进行设计&#xff0c;对应参数如下&#xff1a; matlab Tx仿真 Tx导频Tx功率密度谱 帧结构我使用的是经典嵌入导频帧结构&#xff0c;Tx信号波形的带宽从右图可以看出约为80Mhz USRP验证 测试环境 无人机位于1m处 Rx导频Rx…...

Cell | 超深度宏基因组!复原消失的肠道微生物

期刊&#xff1a;Cell IF&#xff1a;64.5 (Q1) 发表时间&#xff1a;2023.6 研究背景 不同的生活方式会影响微生物组组成&#xff0c;但目前微生物组的研究严重偏向于西方工业化人群&#xff0c;其中工业化人群的特点是微生物群多样性较低。为了理解工…...

Centos7 设置代理方法

针对上面变量的设置方法&#xff1a; 1、在/etc/profile文件 2、在~/.bashrc 3、在~/.zshrc 4、在/etc/profile.d/文件夹下新建一个文件xxx.sh 写入如下配置&#xff1a; export proxy"http://192.168.5.14:8118" export http_proxy$proxy export https_proxy$pro…...

Android versions (Android 版本)

Android versions (Android 版本) All Android releases https://developer.android.com/about/versions Android 1.0 G1 Android 1.5 Cupcake Android 1.6 Donut Android 2.0 Eclair Android 2.2 Froyo Android 2.3 Gingerbread Android 3.0 Honeycomb Android 4.0 Ic…...

LNMP 平台搭建(四十)

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 前言 搭建LNMP 一、安装Nginx 二、安装Mysql 三、安装PHP 四、部署应用 前言 LNMP平台指的是将Linux、Nginx、MySQL和PHP&#xff08;或者其他的编程语言&#xff0c;如…...

pcie 6.0/7.0相对pcie 5.0的变化有哪些?

引言 话说&#xff0c;小编在CSDN博客跟客服机器人聊天&#xff0c;突然看到有个搜索热搜“pcie最全科普贴”。小编有点似曾相识呀&#xff0c;我就好奇点击了一下&#xff0c;没想到几年前写的帖子在CSDN又火了一把。 说到这里&#xff0c;顺带给自己打个广告哈&#xff5e; …...

百度Apollo:自动驾驶技术的未来应用之路

文章目录 前言一、城市交通二、出行体验三、环境保护四、未来前景总结 前言 随着科技的不断进步&#xff0c;自动驾驶技术正逐渐成为现实&#xff0c;颠覆着我们的出行方式。作为中国领先的自动驾驶平台&#xff0c;百度Apollo以其卓越的技术和开放的合作精神&#xff0c;正在…...

C++之std::distance应用实例(一百八十八)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 人生格言&#xff1a; 人生…...

中国建筑出版传媒许少辉八一新书乡村振兴战略下传统村落文化旅游设计日

中国建筑出版传媒许少辉八一新书乡村振兴战略下传统村落文化旅游设计日...

基于java Swing 和 mysql实现的购物管理系统(源码+数据库+说明文档+运行指导视频)

一、项目简介 本项目是一套基于java Swing 和 mysql实现的购物管理系统&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的Java学习者。 包含&#xff1a;项目源码、项目文档、数据库脚本等&#xff0c;该项目附带全部源码可作为毕设使用。 项目都经过…...

2023.9 - java - static 关键字

static关键字主要和Java的内存管理有关。我们可以将static关键字与变量&#xff0c;方法&#xff0c;代码块一起使用。static关键字属于该类&#xff0c;而不是该类的实例。 static关键字可以修饰&#xff1a; 变量&#xff08;也称为类变量&#xff09;方法&#xff08;也称…...

SpringCloud学习笔记(十二)_Zipkin全链路监控

Zipkin是SpringCloud官方推荐的一款分布式链路监控的组件&#xff0c;使用它我们可以得知每一个请求所经过的节点以及耗时等信息&#xff0c;并且它对代码无任何侵入&#xff0c;我们先来看一下Zipkin给我们提供的UI界面都是提供了哪些信息。 如何使用Zipkin 虽然在SpringBoot…...

Java 多线程系列Ⅱ(线程安全)

线程安全 一、线程不安全线程不安全的原因&#xff1a; 二、线程不安全案例与解决方案1、修改共享资源synchronized 使用synchronized 特性 2、内存可见性Java内存模型&#xff08;JMM&#xff09;内存可见性问题 3、指令重排列4、synchronized 和 volatile5、拓展知识&#xf…...

const用法详解

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、const用法详解二、使用步骤 1.引入库2.读入数据总结 前言 提示&#xff1a;这里可以添加本文要记录的大概内容&#xff1a; 例如&#xff1a;随着人工智能…...

【LeetCode75】第四十二题 删除二叉搜索数中的节点

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 题目给我们一棵二叉搜索树&#xff0c;给我们一个目标值&#xff0c;让我们删除节点值等于目标值的节点&#xff0c;并且删除之后需要保持…...

c++:QT day2 信号和槽

1.多态&#xff1a; 静态多态&#xff1a;函数的重载 动态多态&#xff1a;程序运行 多态的实现:父类的指针或引用&#xff0c;指向或初始化子类的对象&#xff0c;调用子类对父类重写的函数&#xff0c;进而展开子类的功能 2.虚函数&#xff1a;用virtua关键字修饰的函数是虚函…...

16 Linux之JavaEE定制篇-搭建JavaEE环境

16 Linux之JavaEE定制篇-搭建JavaEE环境 文章目录 16 Linux之JavaEE定制篇-搭建JavaEE环境16.1 概述16.2 安装JDK16.3 安装tomcat16.4 安装idea2020*16.5 安装mysql5.7 学习视频来自于B站【小白入门 通俗易懂】2021韩顺平 一周学会Linux。可能会用到的资料有如下所示&#xff0…...

AI人员打闹监测识别算法

AI人员打闹监测识别算法通过yolopython网络模型框架算法&#xff0c; AI人员打闹监测识别算法能够准确判断出是否有人员进行打闹行为&#xff0c;算法会立即发出预警信号。Yolo算法&#xff0c;其全称是You Only Look Once: Unified, Real-Time Object Detection&#xff0c;其…...

如何使用CRM系统进行精细化管理客户?

客户是企业的生命线&#xff0c;对客户进行精细化管理&#xff0c;是提高企业收益的关键。那么&#xff0c;如何进行客户管理&#xff1f;CRM系统可以实现精细化管理客户&#xff0c;提升客户的价值。下面我们就来详细说一说。 1、获取客户信息 Zoho CRM系统可以通过web表单、…...

20230829工作心得:如何把大List 切割为多个小List?

1 怎么看这个方法谁在调用它&#xff1f; 解决&#xff1a;按ctrl&#xff0c;然后点进去看。 idea里看方法的具体细节&#xff0c;和谁在调用这个方法&#xff0c;都可以通过按ctrl&#xff0c;然后单击查看。 2 请求的时候&#xff0c;如果时间yyyy-MM-dd HH:mm:ss在url里会…...

基于YOLOV8模型的阶梯和工人目标检测系统(PyTorch+Pyside6+YOLOv8模型)

摘要&#xff1a;基于YOLOV8模型的阶梯和工人目标检测系统可用于日常生活中检测与定位工人、梯子目标&#xff0c;利用深度学习算法可实现图片、视频、摄像头等方式的目标检测&#xff0c;另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标检测算…...

Nginx特性应用及载装

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器。其特点是占有内存少&#xff0c;并发能力强&#xff0c;事实上nginx的并发能力在同类型的网页服务器中表现较好&#xff0c;中国大陆使用nginx的网站有&#xff1a;网易、腾讯、阿里等。 …...

vue3+ts组件通信

1、父组件向组件传参 父组件代码 子组件代码 2、子组件向父组件传参 组件间代码 父组件代码 3、如果eslint报错&#xff0c;需在.eslintrc.js中添加一行代码 4、通过父组件通过 ref 获取子组件的属性或者方法 父组件代码 子组件代码 5、孙子组件provide和inject 父组件…...

基于卷积优化算法优化的BP神经网络(预测应用) - 附代码

基于卷积优化算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码 文章目录 基于卷积优化算法优化的BP神经网络&#xff08;预测应用&#xff09; - 附代码1.数据介绍2.卷积优化优化BP神经网络2.1 BP神经网络参数设置2.2 卷积优化算法应用 4.测试结果&#xff1a;5…...

《论文阅读18》JoKDNet

一、论文 研究领域&#xff1a;用于大尺度室外TLS点云配准的联合关键点检测和特征表达网络论文&#xff1a;JoKDNet: A joint keypoint detection and description network for large-scale outdoor TLS point clouds registration International Journal of Applied Earth Ob…...