摘要: 拓扑排序 引入 拓扑排序是一个有向无环图的所有顶点的线性序列。 该序列需要满足每个顶点出现且只出现一次和如果有一条 \(A\) 到 \(B\) 的路径,在序列中 \(A\) 出现在 \(B\) 的前面。 实现 拓扑排序的步骤: 计算每个点的入度。 入度为 \(0\) 就加入队列。 当队列不为空则循环 阅读全文
posted @ 2023-10-28 16:02 tsqtsqtsq 阅读(25) 评论(0) 推荐(0)
摘要: 二分图 引入 二分图又被称为二部图。 二分图就是可以二分答案的图。 二分图是节点由两个集合组成,且两个集合内部没有边的图。换言之,存在一种方案,将节点划分成满足以上性质的两个集合。 性质 如果两个集合中的点分别染成黑色和白色,可以发现二分图中的每一条边都一定是连接一个黑色点和一个白色点。换言之,二分 阅读全文
posted @ 2023-10-28 16:00 tsqtsqtsq 阅读(31) 评论(0) 推荐(0)
摘要: 欧拉图 & 欧拉路 定义 图中经过所有边恰好一次的路径叫欧拉路径(也就是一笔画)。如果此路径的起点和终点相同,则称其为一条欧拉回路。 欧拉回路:通过图中每条边恰好一次的回路。 欧拉通路:通过图中每条边恰好一次的通路。 欧拉图:具有欧拉回路的图。 半欧拉图:具有欧拉通路但不具有欧拉回路的图。 性质 欧 阅读全文
posted @ 2023-10-28 15:59 tsqtsqtsq 阅读(290) 评论(0) 推荐(0)
摘要: 一些语言技巧 其实有些东西个人平时根本用不到,然而不了解一下的话就看不懂大佬写的题解代码(鉴定为菜导致的 \(\texttt{qwq}\))。 类 类(class)是结构体的拓展,不仅能够拥有成员元素,还拥有成员函数。在面向对象编程(OOP)中,对象就是类的实例,也就是变量。 C++ 中 struc 阅读全文
posted @ 2023-10-28 10:00 tsqtsqtsq 阅读(28) 评论(0) 推荐(0)
摘要: 最小生成树 引入 我们定义无向连通图的 最小生成树(Minimum Spanning Tree,MST)为边权和最小的生成树。 注意:只有连通图才有生成树,而对于非连通图,只存在生成森林。 实现 求最小生成树的算法有 Prim 和 Kruskal 两种。这里我们主要讲解 Kruskal 算法(其实是 阅读全文
posted @ 2023-10-28 09:57 tsqtsqtsq 阅读(54) 评论(0) 推荐(0)
摘要: 并查集 并查集被很多 \(\texttt{OIer}\) 认为是最简洁而优雅的数据结构之一,主要用于解决一些 元素分组 的问题。它管理一系列 不相交的集合,并支持两种操作: 合并:把两个不相交的集合合并为一个集合。 查询:查询两个元素是否在同一个集合中。 先来看看并查集最直接的一个应用场景:亲戚问题 阅读全文
posted @ 2023-10-28 07:58 tsqtsqtsq 阅读(64) 评论(0) 推荐(0)