KH图论
Dijkstra最短路算法
Dijkstra模板
P4779 【模板】单源最短路径(标准版)
- 题号: P4799
- 链接: 题目链接
- 算法类型:最短路
- AC 代码:
1 | void solve() |
- 注意事项:
- 注意Dijkstra算法用最小堆优化可以时间复杂度最低
- Dijkstra算法只能处理非负权路径问题
- 为什么不用队列?:贪心最快,如果是菊花图复杂度会退化到nm
- 含负权路用什么算法?用队列
Tarjan
Tarjan是什么?
- ,其中 是节点数, 是边数
- 实现:stack dfs
- 讨论有向图的连通性
- Tarjan 算法是找出割点、桥和双连通分量的标准算法。
Tarjan怎么用?
-
对于每个节点u我们需要
- dfn[u] 访问顺序
- low[u] 判断u是否属于某个SCC
-
当$$\text{dfn}[u] = \text{low}[u]$$ 的时候u是这个SCC的根节点
-
只有当一个节点确定属于某个 SCC 时,它才会被弹出栈。
-
in_stack[u] (或 vis[u]): 一个布尔数组,标记节点 是否在 stack 中。//换名字以免和遍历算法重名
-
我们在根节点上面对他所领导的强连通分量做统计
-
值是用来衡量 连通性 的标准。
-
tarjan模板
1 |
|
P3916 图的遍历(运用tarjan算法)
- 题号: P3916
- 链接: 题目链接
- 算法类型:Tarjan
- AC 代码:
1 | const int MAXN = 100005; |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 ZuesHans's little bag!








