备战蓝桥杯---图论基础理论
图的存储:
1.邻接矩阵:

我们用map[i][j]表示i--->j的边权
2.用vector数组(在搜索专题的游戏一题中应用过)
3.用邻接表:
下面是用链表实现的基本功能的代码:
#include<bits/stdc++.h>
using namespace std;
struct node{int dian,zhi;struct node* next;
};
void insert(int x,int y,int z){node *p=new node;p->dian=y;p->zhi=z;p->next=head[x];head[x]=p;
}
4.用伪邻接表(链式前向星)(注意第一个next=-1,开始直接memset head=-1即可)
对于(1,3,30,-1)表示1的点指向3,边权为30,下一条边.
我们把这个存在edge[1]里,并令head[1]=1;
(3,6,10,-1),我们存在edge[2]里,并令head[3]=2;
(1,2,10,head[1]),我们存在edge【3】里,并让head[1]=3;
下面是实现的代码:
#include<bits/stdc++.h>
using namespace std;
struct node{int dian,zhi;int next;
};
void insert(int x,int y,int z){edge[++m].dian=y;edge[m].zhi=z;edge[m].next=head[x];head[x]=m;
}
欧拉图(前提是联通)
如果图的一个路径包括每个边恰好一次,则为欧拉路径。
欧拉路径+回路=欧拉回路。
具有欧拉回路的图为欧拉图,具有欧拉路径但无欧拉回路的图为半欧拉图
那么如何判断是否为欧拉图呢?
对于无向图,等价于该图所有顶点的度数为偶数(一进一出)+联通。
对于有向图,等价于该图所有顶点的入度==出度+联通。
拓扑排序
即按照一定的规则安排活动的先后次序(可能有多解)。
现在给一张图,a--》b表示要完成b必须先完成a,那我们如何排序呢?
1.先找没有前驱的点作为开始。
2.把它连着的边给删除,产生更多没有前驱的点作为下一步,入度-1。
3.删不动则无法完成。
具体实现中,我们不能总是去跑入度为0的点。
于是,我们用一个队列。在删后发现入度为0的点就放入队列中即可。
下面是实现的代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,cnt;
struct node{int dian;int next;
}edge[1000000];
int head[1010],inc[1010];
queue<int> q;
void insert(int x,int y){edge[++cnt].dian=y;edge[cnt].next=head[x];head[x]=cnt;
}
void tuopu(){for(int i=1;i<=n;i++){if(inc[i]==0) q.push(i);}int tot=0;while(!q.empty()){int x=q.front();q.pop();cout<<x<<endl;tot++;for(int i=head[x];i!=-1;i=edge[i].next){inc[edge[i].dian]--;if(inc[edge[i].dian]==0){q.push(edge[i].dian);}}}if(tot!=n) cout<<-1;
}
int main(){cin>>n>>m;memset(head,-1,sizeof(head));for(int i=1;i<=m;i++){int x,y;cin>>x>>y;insert(x,y);inc[y]++;}tuopu();
}
拓扑排序的应用:
1.判断一个有向图是否有环,无环的图所有点都可以拓扑排序。
2.AOE网:


对于第一个,我们只用在拓扑排序上维护时间的max即可。
对于第二个,我们可以计算一下每一个活动的最早开始时间与最晚开始时间,因此我们相当于求最早开始时间等于最晚开始时间的点。
那么,我们如何求最晚开始时间呢?
我们只要从结尾反方向跑一回即可。
下面是AC代码:
#include<bits/stdc++.h>
using namespace std;
int n,m,cnt;
struct node{int dian;int next;int zhi;
}edge[1000000];
int head[1010],inc[1010],shijian[1010];
queue<int> q;
void insert(int x,int y,int z){edge[++cnt].dian=y;edge[cnt].next=head[x];edge[cnt].zhi=z;head[x]=cnt;
}
void tuopu(){for(int i=1;i<=n;i++){if(inc[i]==0){q.push(i);shijian[i]=0;}}while(!q.empty()){int x=q.front();q.pop();for(int i=head[x];i!=-1;i=edge[i].next){inc[edge[i].dian]--;shijian[edge[i].dian]=max(shijian[edge[i].dian],shijian[x]+edge[i].zhi);if(inc[edge[i].dian]==0){q.push(edge[i].dian);}}}
}
int main(){cin>>n>>m;memset(head,-1,sizeof(head));for(int i=1;i<=m;i++){int x,y,z;cin>>x>>y>>z;insert(x,y,z);inc[y]++;}tuopu();cout<<shijian[n];
}
相关文章:
备战蓝桥杯---图论基础理论
图的存储: 1.邻接矩阵: 我们用map[i][j]表示i--->j的边权 2.用vector数组(在搜索专题的游戏一题中应用过) 3.用邻接表: 下面是用链表实现的基本功能的代码: #include<bits/stdc.h> using nam…...
[office] excel2003进行可视性加密的方法 #媒体#其他#知识分享
excel2003进行可视性加密的方法 Excel如何对重要文件进行可视性的加密处理呢?下面是小编带来的关于excel2003进行可视性加密的方法,希望阅读过后对你有所启发! excel2003进行可视性加密的方法: 可视性加密步骤1:打开你要加密的excel2003文档…...
算法沉淀——分治算法(leetcode真题剖析)
算法沉淀——分治算法 快排思想01.颜色分类02.排序数组03.数组中的第K个最大元素04.库存管理 III 归并思想01.排序数组02.交易逆序对的总数03.计算右侧小于当前元素的个数04.翻转对 分治算法是一种解决问题的算法范式,其核心思想是将一个大问题分解成若干个小问题&a…...
Qt 进程守护程序
Qt 进程守护程序 简单粗暴的监控,方法可整合到其他代码。 一、windows环境下 1、进程查询函数 processCount函数用于查询系统所有运行的进程中该进程运行的数量,比如启动了5个A进程,该函数查询返回的结果就为5。 windows下使用了API接口查询…...
Linux_文件系统
假定外部存储设备为磁盘,文件如果没有被使用,那么它静静躺在磁盘上,如果它被使用,则文件将被加载进内存中。故此,可以将文件分为内存文件和磁盘文件。 内存文件 磁盘文件 软、硬链接 一.内存文件 1.1 c语言的文件接口 …...
算法沉淀——链表(leetcode真题剖析)
算法沉淀——链表 01.两数相加02.两两交换链表中的节点03.重排链表04.合并 K 个升序链表05.K个一组翻转链表 链表常用技巧 1、画图->直观形象、便于理解 2、引入虚拟"头节点" 3、要学会定义辅助节点(比如双向链表的节点插入) 4、快慢双指针…...
Flink从入门到实践(一):Flink入门、Flink部署
文章目录 系列文章索引一、快速上手1、导包2、求词频demo(1)要读取的数据(2)demo1:批处理(离线处理)(3)demo2 - lambda优化:批处理(离线处理&…...
python分离字符串 2022年12月青少年电子学会等级考试 中小学生python编程等级考试二级真题答案解析
目录 python分离字符串 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python分离字符串 2022年12月 python编程等级考试级编程题 一、题目要…...
Excel练习:折线图突出最大最小值
Excel练习:折线图突出最大最小值 要点:NA值在折现图中不会被绘制,看似一条线,实际是三条线。换成0值和""都不行。 查看所有已分享Excel文件-阿里云 学习的这个视频:Excel折线图,…...
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之MenuItem组件
鸿蒙(HarmonyOS)项目方舟框架(ArkUI)之MenuItem组件 一、操作环境 操作系统: Windows 10 专业版、IDE:DevEco Studio 3.1、SDK:HarmonyOS 3.1 二、MenuItem组件 用来展示菜单Menu中具体的item菜单项。 子组件 无。 接口 Men…...
Mockito测试框架中的方法详解
这里写目录标题 第一章、模拟对象1.1)①mock()方法:1.2)②spy()方法: 第二章、模拟对象行为2.1)模拟方法调用①when()方法 2.2)模拟返回值②thenReturn(要返回的值)③doReturn() 2.3)模拟并替换…...
Atcoder ABC339 A - TLD
TLD 时间限制:2s 内存限制:1024MB 【原题地址】 所有图片源自Atcoder,题目译文源自脚本Atcoder Better! 点击此处跳转至原题 【问题描述】 【输入格式】 【输出格式】 【样例1】 【样例输入1】 atcoder.jp【样例输出1】 jp【样例说明…...
企业级DevOps实战
第1章 Zookeeper服务及MQ服务 Zookeeper(动物管理员)是一个开源的分布式协调服务,目前由Apache进行维护。 MQ概念 MQ(消息队列)是一种应用程序之间的通信方法,应用程序通过读写出入队列的消息࿰…...
C++中的new和delete
1.new和delete的语法 我们知道C语言的内存管理方式是malloc、calloc、realloc和free,而我们的C中除了可以使用这些方式之外还可以选择使用new和delete来进行内存管理。 new和delete的主要语法如下 从上面的代码我们只能知道new要比malloc好写一些,但是其…...
rtt设备io框架面向对象学习-dac设备
目录 1.dac设备基类2.dac设备基类的子类3.初始化/构造流程3.1设备驱动层3.2 设备驱动框架层3.3 设备io管理层 4.总结5.使用 1.dac设备基类 此层处于设备驱动框架层。也是抽象类。 在/ components / drivers / include / drivers 下的dac.h定义了如下dac设备基类 struct rt_da…...
腾讯云幻兽帕鲁服务器配置怎么选择合适?
腾讯云幻兽帕鲁服务器配置怎么选?根据玩家数量选择CPU内存配置,4到8人选择4核16G、10到20人玩家选择8核32G、2到4人选择4核8G、32人选择16核64G配置,腾讯云百科txybk.com来详细说下腾讯云幻兽帕鲁专用服务器CPU内存带宽配置选择方法ÿ…...
796. 子矩阵的和
Problem: 796. 子矩阵的和 文章目录 思路解题方法复杂度Code 思路 这是一个二维前缀和的问题。二维前缀和的主要思想是预处理出一个二维数组,使得每个位置(i, j)上的值表示原数组中从(0, 0)到(i, j)形成的子矩阵中所有元素的和。这样,对于任意的子矩阵(x…...
如何在 Python 中处理 Unicode
介绍 Unicode 是世界上大多数计算机的标准字符编码。它确保文本(包括字母、符号、表情符号,甚至控制字符)在不同设备、平台和数字文档中显示一致,无论使用的操作系统或软件是什么。它是互联网和计算机行业的重要组成部分…...
CSDN文章导出PDF整理状况一览
最近CSDN有了导出文章PDF功能,导出的PDF还可以查询, 因此,把文章导出PDF,备份一下自己的重要资料。 目前整理内容如下 No.文章标题整理时间整理之后 文章更新Size (M)10001_本地电脑-开发相关软件保持位…...
jmeter-05变量(用户定义变量,用户参数,csv文档参数化)
文章目录 一、jmeter有三种变量二、用户定义变量(这个更多的可以理解为全局变量)1、设置2、引用三、用户参数(可以理解为局部变量)1、设置2、引用3、用户参数化要配合线程组的线程数使用4、结果五、csv文档参数1、创建csv文件2、设置2、引用csv文件可以配合线程组的线程数,…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
MFC内存泄露
1、泄露代码示例 void X::SetApplicationBtn() {CMFCRibbonApplicationButton* pBtn GetApplicationButton();// 获取 Ribbon Bar 指针// 创建自定义按钮CCustomRibbonAppButton* pCustomButton new CCustomRibbonAppButton();pCustomButton->SetImage(IDB_BITMAP_Jdp26)…...
Auto-Coder使用GPT-4o完成:在用TabPFN这个模型构建一个预测未来3天涨跌的分类任务
通过akshare库,获取股票数据,并生成TabPFN这个模型 可以识别、处理的格式,写一个完整的预处理示例,并构建一个预测未来 3 天股价涨跌的分类任务 用TabPFN这个模型构建一个预测未来 3 天股价涨跌的分类任务,进行预测并输…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
ardupilot 开发环境eclipse 中import 缺少C++
目录 文章目录 目录摘要1.修复过程摘要 本节主要解决ardupilot 开发环境eclipse 中import 缺少C++,无法导入ardupilot代码,会引起查看不方便的问题。如下图所示 1.修复过程 0.安装ubuntu 软件中自带的eclipse 1.打开eclipse—Help—install new software 2.在 Work with中…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
【Oracle】分区表
个人主页:Guiat 归属专栏:Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...
大数据学习(132)-HIve数据分析
🍋🍋大数据学习🍋🍋 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言Ǵ…...
Ubuntu系统复制(U盘-电脑硬盘)
所需环境 电脑自带硬盘:1块 (1T) U盘1:Ubuntu系统引导盘(用于“U盘2”复制到“电脑自带硬盘”) U盘2:Ubuntu系统盘(1T,用于被复制) !!!建议“电脑…...
