OI学习笔记之图论基础知识

图论基础知识


没有用的话qaq :
Ummmm…图论的大部分知识本来早就有学过,只是一直没有写成博文来梳理,但既然上了qbxt DP图论就写一篇来总结下主要是来听DP的,但…由于太菜的原因,DP听得天花乱坠QWQ


一,图:图是边和点组成的几何体 G=< V , E > V是点集合,E是边集

在这里插入图片描述
形如这样的东西就是一个图


二,图的相关基本概念
1,边:图上连接点和点之间的东西叫做边,图上边分为有向边和无向边。有向边是有方向的边,无向边是没有方向的边,在图上具体体现为有无箭头。
2,点:图上的点
3,权:就是某个东西的大小,图中一般会存在点权和边权,就是给点赋一个值和给边赋一个值,没有权的情况称为无权,权值为负的时候称为负权(注意以后算法中的负权边)
4,环:无向边中的环就像上图中的1,2,5和2,3,4,5,环的特点是,环上任意一点能到达通过环能回到自己!!有向图的环相同,就是一个点如果能通过一条路径回到自己,我们就说这条路径是一个环,负环的定义为环上所有边权之和小于零。
5,重边:即两个点之间有重复的边,但注意两个点之间重复但方向不同的边不属于重边。
6,有向无环图(DAG):字面意思,是有向图且没有环的图称为有向无环图,简称DAG,一般与有向图缩点后拓扑排序后,DAG上的DP有关,同时DP的实质是个DAG。
7,路径:从一条边到另一条边的路称为路径,简单路径是一条没有环的路径。
8,连通:如果一个点A能到达另一个点B,称为点A和点B连通,如果点B也能到达A点则称点A和点B是强连通的,从图中某一点出发,如果能到达图上任意一点,则称,这个图是一个连通图。


三,特殊的图
1,树:树是一种特殊的图
在这里插入图片描述
2,完全图:图上任意两点之间都有一条无向边的图
3,竞赛图:与完全图长得完全一致,不过竞赛图上的边有方向
4,基环树:有一个环,这个环向四周发散的全是树,这种图叫做基环树。
在这里插入图片描述
5,仙人掌图:每条边至多在一个环上的图


四,图的存储方式
图的存储存的都是有向边,对于无向边的情况,我们将其拆成两条有向边存储。
1,邻接矩阵
邻接矩阵因为比较耗内存O( n^2 ),且遍历较慢的原因,在OI中并不常用,因为博主比较弱,博主认为只有floyd会用的这个怪怪的东西。

邻接矩阵就是一个二维数组,二维数组就是矩阵嘛,一开始我们要对邻接矩阵进行初始化,可能置成0,可能置成-1,也可能置成正无穷,无论置成什么,都代表没有边(即如果 g[a][b]=初始化的值则代表a到b之间没有边)。

加边的话也很简单,就是如果是s到e存在一条边权为d的边,那么g[s][e]=d,同时要注意某些题目有重边的情况,以防需要留下的边权被不需要留下的冲刷掉,一般我们会留下边权最小的边或者边权最大的边,留下的方法就是加个if判断一下。

邻接矩阵的有点是可以快速知道s到e之间有没有边,边权是多少,缺点是遍历时间复杂度较高,同时,定义较浪费空间(因为有很多节点之间没有边)。

2,邻接表
比起邻接矩阵,邻接表是OI中最常用的存图方法

其原理是用了n个链表,用一个first数组在存边的时候将从某节点出发的所有边串了起来。

struct node
{
	int ed,len,nxt;
};
node edge[2333];
int first[2333],cnt;

inline void add_edge(int s,int e,int d)
{
	cnt++;
	edge[cnt].ed=e;
	edge[cnt].len=d;
	edge[cnt].nxt=first[s];
	first[s]=cnt;
	return;
}//加边 

int main()
{
	scanf("%d%d%d",&s,&e,&d);
	add_edge(s,e,d);
	//add_edge(e,s,d); 若是无向边 
} 

for(int i=first[s];i;i=edge[i].ed)
{
	
}//遍历从s出发的所有边 

写在最后 Yousiki Orz

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
WebSocket是一种用于实现双向通信的协议。在前端开发中,有多种库可供使用,其中包括Socket.IO和原生WebSocket。 Socket.IO是一个流行的库,提供了更多功能和灵活性,但是它不仅仅使用WebSocket。它还可以使用其他传输方式,例如轮询和长轮询,以确保在不同浏览器和服务器之间的兼容性。 因此,如果你在前端使用了Socket.IO,但后端并没有使用Socket.IO库来处理WebSocket通信,那么就无法连接到后端的WebSocket。 相比之下,原生WebSocket是浏览器内置的标准API,只支持WebSocket协议。它提供了更直接的方式与服务器进行双向通信,且更容易理解和使用。 如果你使用原生WebSocket,就不会遇到与Socket.IO不兼容的问题。 所以,如果你在使用WebSocket时遇到连接问题,首先要确认前后端是否使用了相同的库或标准。如果你在前端使用了Socket.IO,那么后端也需要使用Socket.IO来处理WebSocket通信。如果你想简化通信过程,也可以考虑使用原生WebSocket来与后端进行通信。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [socket.io-client报404错误爬坑与自己封装websocket](https://blog.csdn.net/RkHker/article/details/112547414)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [websocket.io用法](https://blog.csdn.net/YangMo_/article/details/109325832)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值