![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
文章平均质量分 66
各种图论解法
_szy_
oier
展开
-
缩点的综合应用(二)
找出入度为0的点,费用累加。入度不为0的点说明一定可以被一个已知点揭发(不然已经在之前return 0了,不用担心揭发他的人不能提前被揭发)。1.每个人都可以揭发一些人,如果一个人能被揭发,那就不需要管了,只需要管揭发他的人即可。所有我们只要管入度为0的人,如果不能被收买,那就任务失败!2.第一步,找出可以被收买的人,然后tarjan他,把他所构成的环缩成一个超级点即可,他的值换为能最小被收买的值。3.第二步,遍历一遍,若他既不能被收买,也没有和能被收买的人达成关系,他就是使任务失败的人。原创 2023-08-24 01:44:31 · 107 阅读 · 0 评论 -
【图论】缩点的综合应用(一)
缩点,也称为点缩法(Vertex Contraction),是图论中的一种操作,通常用于缩小图的规模,同时保持了图的某些性质。这个操作的目标是将图中的一些节点合并为一个超级节点,同时调整相关边,以便保持图的连通性和其他性质。具体步骤如下:选择一个要缩点的节点:选择图中的一个节点,将它合并到另一个节点上。合并节点:将选定的节点合并到另一个节点上,形成一个新的超级节点。通常情况下,选择入度或出度较小的节点进行合并,以减小新图的规模。调整边:将与被合并节点相邻的边重新连接到新的超级节点上。原创 2023-08-23 21:21:32 · 1320 阅读 · 1 评论 -
【图论】拓扑排序
拓扑排序是一种对有向无环图(DAG)进行排序的算法,使得图中的每个顶点在排序中都位于其依赖的顶点之后。它通常用于表示一些任务之间的依赖关系,例如在一个项目中,某些任务必须在其他任务之前完成。拓扑排序的步骤如下:找到入度为0的顶点:入度是指指向某个顶点的边的数量。首先,找到图中入度为0的顶点,它们是没有依赖关系的顶点,可以作为排序的起点。将入度为0的顶点移出图:选择一个入度为0的顶点,将其从图中移除,并将与之相邻的顶点的入度减1。重复步骤1和步骤2:重复上述步骤,直到所有顶点都被移除。原创 2023-08-23 20:22:40 · 613 阅读 · 0 评论 -
【图论】最小生成树的应用
当看到这些条件,可以想到最小生成树1.涉及到每个节点2.最小/最大的值3.一般都要用到虚拟节点,以处理初始点。原创 2023-08-23 19:25:29 · 1224 阅读 · 0 评论 -
【专题】【图论】最短路的传送问题
这个是特殊情况,起点即终点,一路传送,其实多此一举,但没办法,只怪我们把图分层了。可知背景就是求最短路问题,但难点是可以使一条路距离缩短至0,那如何更好的利用这个机会呢?这题虽然是多源,但只有一个传送门,而且数据范围小,只有100,所以直接上floyd算法!即我们可以免费往下传一次,其实也就相当于两点距离为0了,这时终点应该9号节点。第三个是已经用过一次机会,已经在下面了,所以正常边。我们两重遍历,找出门,在两重暴力folyd即可。第一个是从上到下,是使用传送的边。A:不是已经知道在哪搭桥了吗?原创 2023-08-19 20:35:25 · 524 阅读 · 0 评论 -
【图论】Floyd算法
Floyd算法,也称为Floyd-Warshall算法,是一种用于解决所有节点对最短路径问题的动态规划算法。它可以在有向图或带权图中找到任意两个节点之间的最短路径。Floyd算法的基本思想是通过中间节点逐步优化路径长度。它使用一个二维数组来存储任意两个节点之间的最短路径长度,并通过不断更新这个数组来得到最终的结果。Floyd算法的时间复杂度为O(n^3),其中n是图中节点的数量。它适用于解决稠密图(边数接近节点数的平方)的最短路径问题,但对于稀疏图来说,可能存在更高效的算法。原创 2023-08-19 19:17:56 · 716 阅读 · 0 评论 -
【堆】概念+二叉堆模板
堆通常可以被看做一棵树,它满足下列性质:1.堆中任意节点的值总是不大于(不小于)其子节点的值;2.堆是一棵完全树。将任意节点不大于其子节点的堆叫做最小堆或小根堆,而将任意节点不小于其子节点的堆叫做最大堆或大根堆。常见的堆有二叉堆、左倾堆、斜堆、二项堆、斐波那契堆等等。二叉堆是完全二叉树,它分为两种: 最大堆和最小堆。最大堆:父结点的键值总是大于或等于任何一个子节点的键值。最小堆: 父结点的键值总是小于或等于任何一个子节点的键值。原创 2023-07-24 11:47:21 · 69 阅读 · 0 评论 -
【图论】强连通分量进阶
强连通分量可以判断环和进行缩点。还有一系列作用....这篇文章介绍。原创 2023-08-03 16:25:39 · 1727 阅读 · 0 评论 -
【图论】强连通分量
强连通分量(Strongly Connected Components,简称SCC)是图论中的一个概念,用于描述有向图中的一组顶点,其中任意两个顶点之间都存在一条有向路径。换句话说,对于图中的任意两个顶点u和v,如果存在一条从u到v的有向路径,同时也存在一条从v到u的有向路径,那么u和v就属于同一个强连通分量。强连通分量在许多图算法中都有重要的应用,比如强连通分量的计算可以用于解决图的可达性问题、强连通分量的缩点可以用于求解最小生成树等。注意:强连通分量是有向图!原创 2023-08-01 23:37:23 · 1216 阅读 · 0 评论 -
【图论】无向图连通性(tarjan算法)
无向图连通性问题原创 2023-08-01 00:39:39 · 2997 阅读 · 0 评论 -
【图论】差分约束
x1-x0原创 2023-07-30 20:52:52 · 1130 阅读 · 0 评论 -
【图论】Prim算法
最小生成树问题是指在一个连通无向图中找到一个生成树,使得树中所有边的权重之和最小。Prim算法的基本思想是从一个起始顶点开始,逐步扩展生成树,直到覆盖所有顶点。Prim算法的关键在于如何选择与生成树相连的边中权重最小的边。一种常用的方法是使用优先队列(最小堆)来存储候选边,每次选择权重最小的边加入生成树。Prim算法的时间复杂度为O(ElogV),其中V是顶点数,E是边数。它是一种有效的算法,适用于稠密图和稀疏图。原创 2023-07-26 19:29:42 · 1263 阅读 · 0 评论 -
【图论】kruskal算法
Kruskal算法是一种用于解决最小生成树问题的贪心算法。最小生成树是指在一个连通无向图中,选择一棵包含所有顶点且边权重之和最小的树。排序集合(并查集实现)形成环路,(即在同一集合)Kruskal算法的核心思想是通过不断选择权重最小的边,并判断是否形成环路来构建最小生成树。它不需要事先知道图的连通性,而是通过边的选择来逐步连接图中的顶点,直到所有顶点都被连接为止。需要注意的是,Kruskal算法适用于解决无向图的最小生成树问题,对于有向图则需要使用其他算法,如Prim算法。原创 2023-07-25 23:16:29 · 1005 阅读 · 0 评论 -
【图论】spfa算法
SPFA(Shortest Path Faster Algorithm)是一种用于解决单源最短路径问题的算法,它是对Bellman-Ford算法的一种优化。SPFA算法通过不断地更新节点的最短路径估计值来逐步逼近最短路径。SPFA算法的优化在于使用了队列来存储待处理的节点,而不是像Bellman-Ford算法那样使用了一个集合。这样可以避免重复处理节点,提高算法的效率。需要注意的是,SPFA算法适用于解决带有负权边的图的最短路径问题,但如果图中存在负权环,则算法无法得到正确的结果。原创 2023-07-25 21:45:17 · 123 阅读 · 0 评论 -
【图论】Dijkstra算法(优化版)
请见上篇文章。原创 2023-07-25 11:40:25 · 524 阅读 · 0 评论 -
【图论】Dijkstra算法(基础版)
Dijkstra算法(迪杰斯特拉算法) 用来计算从一个点到其他所有点的最短路径算法,是一种单源最短路径算法。原创 2023-07-24 21:10:33 · 365 阅读 · 0 评论