![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
图论
文章平均质量分 60
图论
hnjzsyjyj
这个作者很懒,什么都没留下…
展开
-
AcWing 3587:连通图 ← dfs(邻接矩阵 or 链式前向星)
● 本题利用 dfs 判断连通图的原理在于“dfs必然能够遍历到连通图的所有点”。如果有点没有被遍历到,说明不连通。原创 2024-07-11 23:02:21 · 332 阅读 · 0 评论 -
树的直径 ← 树形 DP 法(有负权边)
● 什么是树的直径?树上任意两结点之间最长的简单路径即为树的直径。若无负权边,可以采用两次 DFS 或者树形 DP 的方法在 O(n) 时间求出树的直径;若有负权边,则只能采用树形 DP 求解树的直径。显然,一棵树可以有多条直径,因为树中可能存在最长长度相等的多条简单路径。原创 2024-07-08 00:36:59 · 322 阅读 · 0 评论 -
树的直径 ← 两次 DFS 法(无负权边)
● 什么是树的直径?树上任意两结点之间最长的简单路径即为树的直径。若无负权边,可以采用两次 DFS 或者树形 DP 的方法在 O(n) 时间求出树的直径;若有负权边,则只能采用树形 DP 求解树的直径。显然,一棵树可以有多条直径,因为树中可能存在最长长度相等的多条简单路径。原创 2024-07-08 00:03:04 · 192 阅读 · 0 评论 -
AcWing 1138:城市公交网建设问题 ← Kruskal算法模板题
● 最小生成树问题,在结点数量较多时,适合采用 Kruskal 算法求解。原创 2024-07-07 21:05:59 · 345 阅读 · 0 评论 -
洛谷 P1726:上白泽慧音 ← Tarjan算法
横向边和前向边都无法构成回路,即不能形成大于一个点的强连通分量。所以,Tarjan算法的关键,就是找出重要的后向边,用于求解图中的强连通分量。原创 2024-06-19 21:17:20 · 1139 阅读 · 0 评论 -
洛谷 P3379:最近公共祖先(LCA)← Tarjan+并查集
● Tarjan算法求 LCA 是离线算法,基于后序 DFS(深度优先搜索)和并查集。原创 2024-06-19 09:45:44 · 312 阅读 · 0 评论 -
洛谷 P3379:最近公共祖先(LCA)← 倍增+链式前向星
● 设 f[x][k] 表示 x 的 2^k 辈祖先,则有 f[x][k]=f[f[x][k-1]][k-1]。显然,f[x][0] 就是 x 的 2^0=1 辈祖先,即 x 的父结点。其中,k∈[1, logn],n为树的结点个数。原创 2024-06-16 15:34:40 · 301 阅读 · 0 评论 -
DFS序 & 欧拉序 ← STL vector 存图
假设以某结点 u 为根的子树大小为 cnt[u],u 在整棵树中的 DFS 序为 dfs[u],则可得结点 u 的所有子树对应的 DFS 序区间为 [dfs[u],dfs[u]+cnt[u]-1]。若设 first[u] 是欧拉序中某结点 u 第一次出现的位置,first[v] 是欧拉序中某结点 v 第一次出现的位置,树上两结点 u, v 的最近公共祖先(LCA),为欧拉序区间 [first[u], first[v]] 或 [first[v], first[u]] 中时间戳最小的结点。原创 2024-06-14 22:29:16 · 1024 阅读 · 0 评论 -
DFS序 & 欧拉序 ← 链式前向星存图
● 通过 DFS 序,可将一棵树映射为一个一维数组。● 假设以某结点 u 为根的子树大小为 cnt[u],u 在整棵树中的 DFS 序为 dfs[u],则可得结点 u 的所有子树对应的 DFS 序区间为 [dfs[u],dfs[u]+cnt[u]-1]。● 一棵子树所有结点的 DFS 序是整棵树的 DFS 序的连续一段。● 借助DFS序,可以快速判断一个结点是否在某子树内。对某子树进行操作,相当于在对应的 DFS 序区间内进行操作。原创 2024-06-14 12:45:31 · 813 阅读 · 0 评论 -
LibreOJ 10135:祖孙询问 ← DFS序 & 欧拉序+LCA+链式前向星
● 通过 DFS 序可将一棵树映射为一维数组。● 假设以某结点 u 为根的子树大小为 cnt[u],u 在整棵树中的 DFS 序为 dfs[u],则可得结点 u 的所有子树对应的 DFS 序区间为 [dfs[u],dfs[u]+cnt[u]-1]。 ● 一棵子树所有结点的 DFS 序是整棵树的 DFS 序的连续一段。● 借助DFS序,可以快速判断一个结点是否在某子树内。原创 2024-06-14 10:09:26 · 750 阅读 · 0 评论 -
洛谷 P1546:最短网络 ← Kruskal算法模板题
本题采用“邻接矩阵”存图。也是一道 Kruskal 算法模板题。原创 2024-06-13 14:23:37 · 678 阅读 · 0 评论 -
洛谷 P1546:最短网络 ← Prim算法模板题
本题采用“邻接矩阵”存图。也是一道Prim算法模板题。原创 2024-06-13 13:50:18 · 395 阅读 · 0 评论 -
AcWing 1189:刻录光盘 ← 并查集+入度
● 光盘数量确定(1)利用并查集确定有多少个团伙,就需要刻多少个光盘。(2)不愿意拷贝资料给任何人的营员,组委会也需要给刻光盘。原创 2024-06-12 23:13:48 · 240 阅读 · 0 评论 -
并查集、带权并查集的模板
并查集、带权并查集的模板原创 2021-09-06 23:51:40 · 485 阅读 · 1 评论 -
AcWing 848:拓扑排序 ← 链式前向星存图
拓扑排序算法步骤:(1)从有向图中选择一个无前驱(即入度为0)的顶点并且输出它。(2)从图中删除该顶点及所有以它为尾的有向边。(3)重复上述两步,直至不存在无前驱的顶点。(4)若此时输出的顶点数小于有向图中的顶点数,则说明有向图中存在环,否则输出的顶点序列就是一个拓扑序列。原创 2024-06-12 20:27:58 · 350 阅读 · 0 评论 -
AcWing 848:拓扑排序 ← STL vector 存图
拓扑排序算法步骤:(1)从有向图中选择一个无前驱(即入度为0)的顶点并且输出它。(2)从图中删除该顶点及所有以它为尾的有向边。(3)重复上述两步,直至不存在无前驱的顶点。(4)若此时输出的顶点数小于有向图中的顶点数,则说明有向图中存在环,否则输出的顶点序列就是一个拓扑序列。原创 2024-06-12 19:59:16 · 126 阅读 · 0 评论 -
AcWing 1639:拓扑顺序 ← 链式前向星
点的编号从 1 到 N。(故代码中的 idx 初值置为 1,而不是常见的 0)原创 2024-06-12 17:39:58 · 447 阅读 · 0 评论 -
AcWing 477:神经网络 ← 拓扑排序+链式前向星
● 拓扑序列:https://blog.csdn.net/hnjzsyjyj/article/details/129811447● 链式前向星:https://blog.csdn.net/hnjzsyjyj/article/details/139369904val[idx]:存储编号为 idx 的边的值e[idx]:存储编号为 idx 的结点的值ne[idx]:存储编号为 idx 的结点指向的结点的编号h[a]:存储头结点 a 指向的结点的编号原创 2024-06-12 10:12:21 · 773 阅读 · 0 评论 -
AcWing 4295:QS网络 ← Kruskal算法
本算法参考YXC大佬的经典Prim算法实现。其适用面广,不仅适用于无向连通图,也适用于无向非连通图。即便对于边权可能为负数,且有重边和自环情形的无向连通图及无向非连通图,本算法都适用。原创 2024-06-11 21:54:29 · 460 阅读 · 0 评论 -
AcWing 4295:QS网络 ← Prim算法
本算法参考YXC大佬的经典Prim算法实现。其适用面广,不仅适用于无向连通图,也适用于无向非连通图。即便对于边权可能为负数,且有重边和自环情形的无向连通图及无向非连通图,本算法都适用。Prim算法模板详见:https://blog.csdn.net/hnjzsyjyj/article/details/127518589原创 2024-06-11 18:55:57 · 353 阅读 · 0 评论 -
网络流常用示意图及基本概念
网络:网络是一个有向有权图,包含一个源点和一个汇点,没有反平行边。网络流:是定义在网络边集上的一个非负函数,表示边上的流量。网络最大流:在满足容量约束和流量守恒的前提下,在流网络中找到一个净输出最大的网络流。可行流:容量约束、流量守恒。原创 2024-06-11 17:37:38 · 410 阅读 · 0 评论 -
AcWing 1261:查找二叉树 ← dfs
链式前向星代码中的数组是要理解的核心。它们的含义弄清楚了,理解链式前向星将会 So easy!(1)val[idx]:存储编号为 idx 的边的值(2)e[idx]:存储编号为 idx 的结点的值(3)ne[idx]:存储编号为 idx 的结点指向的结点的编号(4)h[a]:存储头结点 a 指向的结点的编号原创 2024-06-03 21:44:12 · 534 阅读 · 0 评论 -
洛谷 B3642:二叉树的遍历 ← 结构体方法 & 链式前向星方法
/*val[idx]:存储编号为 idx 的边的值e[idx]:存储编号为 idx 的结点的值ne[idx]:存储编号为 idx 的结点指向的结点的编号h[a]:存储头结点 a 指向的结点的编号*/原创 2024-05-31 22:14:13 · 345 阅读 · 0 评论 -
yxc 图示“链式前向星”核心操作
val[idx]:存储编号为 idx 的边的值;e[idx]:存储编号为 idx 的结点的值;ne[idx]:存储编号为 idx 的结点指向的结点的编号;h[a]:存储头结点 a 指向的结点的编号。原创 2024-06-01 13:38:51 · 470 阅读 · 0 评论 -
洛谷 P5043:树同构
● 本题是无根树的同构。因此只有当根一样时,同构的两棵无根树的哈希值才相同。本题的一种解法为把以每个结点为根时的哈希值都存进多重集,再把多重集的哈希值算出来,进行比较。原创 2024-05-31 10:19:26 · 352 阅读 · 0 评论 -
AcWing 852:spfa判断负环 ← 链式前向星存图
● SPFA 算法是判断负环的常用算法,其实现如下: 在更新 dis[i] 时,我们顺带维护一个 cnt[i] 数组,该数组用来存放最短路的边数。如果 cnt[i]≥n 时,说明图中有 n+1 个点,而题目一共给了 n 个点,说明一定存在环。而 SPFA 算法更新的要求是距离变短,因此这个环一定是负环。 但是从原点开始可能走不到负环,我们需要初始时把所有的点都放入队列中。原创 2024-05-06 08:05:57 · 382 阅读 · 0 评论 -
AcWing 851:spfa求最短路 ← 链式前向星存图
● 百度百科:SPFA 算法是 Bellman-Ford 算法的队列优化算法的别称,通常用于求含负权边的单源最短路径,以及判负权环。SPFA 最坏情况下时间复杂度和朴素 Bellman-Ford 相同,为 O(VE)。●Bellman ford 算法可以存在负权回路,是因为其循环的次数是有限制的,因此最终不会发生死循环。但是, SPFA 算法不可以。这是因为,SPFA 算法用队列来存储,只要发生了更新就会不断的入队。因此,假如有负权回路请不要用 SPFA ,否则会死循环。原创 2024-05-05 17:45:42 · 365 阅读 · 0 评论 -
请编程输出无向无权图各个顶点的度 ← STL vector 模拟邻接表存图
STL vector 模拟邻接表存图原创 2024-03-09 13:55:53 · 434 阅读 · 0 评论 -
请编程输出无向无权图各个顶点的度 ← 链式前向星存图
h[a]:存储单链表表头结点 a 的编号e[idx]:存储结点 idx 的值ne[idx]:存储结点 idx 的下一个结点的编号原创 2024-03-09 11:26:57 · 1389 阅读 · 1 评论 -
请编程输出无向无权图各个顶点的度 ← 邻接矩阵存图
请编程输出无向无权图各个顶点的度。原创 2024-03-09 09:03:05 · 673 阅读 · 1 评论 -
CSP-J 2023 复赛第4题:旅游巴士
STL priority_queue具有“自动排序”的强大功能。其默认使用operator原创 2024-02-24 08:52:42 · 1692 阅读 · 0 评论 -
AcWing 511:联合权值 ← DFS、链式前向星
h[a]:存储单链表表头结点 a 的编号e[idx]:存储结点 idx 的值ne[idx]:存储结点 idx 的下一个结点的编号原创 2023-12-02 10:55:35 · 475 阅读 · 0 评论 -
图的应用:关键路径 ← PPT
图的应用:关键路径 ← PPT原创 2023-10-10 22:04:55 · 239 阅读 · 0 评论 -
最短路径:Dijkstra算法及Floyd算法 ← PPT
两种常见的最短路径问题:(1)从某个源点到其余各顶点的最短路径 ← Dijkstra算法(2)任意两个顶点之间的最短距离 ← Floyd算法原创 2023-10-10 21:44:56 · 283 阅读 · 0 评论 -
罗勇军 →《算法竞赛·快冲300题》每日一题:“小球配对” ← 并查集
◆ 异质图本题本质上是异质图问题。异质图是一种具有多种节点类型或多种边类型的图数据结构,用于刻画复杂异质对象及其交互,具有丰富的语义信息。本题异质图构建的依据是:将某球放入某个篮子,则此球与篮子之间就有连线,否则就没有连线。原创 2023-08-22 21:18:26 · 162 阅读 · 0 评论 -
POJ 1270:Following Orders → 拓扑序列
输入两行字母,第一行是字母,第二行是字母的关系。一对儿字母 A B 表示 A原创 2023-03-28 13:17:30 · 181 阅读 · 0 评论 -
关键路径 ← AOE网
AOE-网在工程计划和经营管理中有广泛的应用,针对实际的应用问题,通常需要解决以下两个问题:(1)估算完成整项工程至少需要多少时间;(2)判断哪些活动是影响工程进度的关键。工程进度控制的关键在于抓住关键活动。在一定范围内,非关键活动的提前完成对于整个工程的进度没有直接的好处,它的稍许拖延也不会影响整个工程的进度。工程的指挥者可以把非关键活动的人力和物力资源暂时调给关键活动,加快其进展速度,以使整个工程提前完工。原创 2022-10-26 13:59:00 · 297 阅读 · 0 评论 -
Kruskal算法 → 适用于连通图及非连通图
本算法参考YXC大佬的经典Kruskal算法实现。其适用面广,不仅适用于无向连通图,也适用于无向非连通图。即便对于边权可能为负数,且有重边和自环情形的无向连通图及无向非连通图,本算法都适用。原创 2022-10-25 23:42:22 · 489 阅读 · 0 评论 -
Prim算法 → 适用于连通图及非连通图
本算法参考YXC大佬的经典Prim算法实现。其适用面广,不仅适用于无向连通图,也适用于无向非连通图。即便对于边权可能为负数,且有重边和自环情形的无向连通图及无向非连通图,本算法都适用。原创 2022-10-25 18:16:13 · 814 阅读 · 0 评论 -
求无向连通图的最小生成树 ← Prim算法
Prim算法,又称加点法。若给出的无向图是连通图或非连通图,且图中可能存在重边和自环,边权可能为负数的情形,则可参考YXC大佬的经典Prim算法代码。原创 2022-10-25 07:43:50 · 1490 阅读 · 0 评论