【算法学习】 tarjan算法以及图论的一些应用(强连通分量/割点/桥/缩点)

本文介绍了Tarjan算法及其在图论中的应用,包括求解强连通分量、缩点和识别割点。通过理解dfn和low数组的含义,可以有效地解决这些问题。文章提供了相关模板题目的示例,强调在实际解题中灵活运用这些基础知识的重要性。
摘要由CSDN通过智能技术生成

学习了tarjan算法,觉得这个算法真的是挺强大的,然而蒟蒻并不会用 ,先学习着写一篇博客作为记录。

学习tarjan的点觉得主要在于两个数组的理解—— d f n , l o w dfn,low dfn,low数组
d f n dfn dfn数组,用于记录 d f s dfs dfs序,也就是这个点最早什么时候被dfs搜索到。
l o w low low数组,用于记录其及其子树中的点能回溯到的点的最小 d f s dfs dfs

这两个数组引出了很多很多应用

tarjan模板

const int maxn = 1e5+5;
struct Edge{
   
	int u,v,nxt;
}edge[maxn];
int head[maxn],tot;
inline void addedge(int u,int v){
   
	edge[++tot] = {
   u,v,head[u]};
	head[u] = tot;
}
bool vis[maxn];
int dfn[maxn],sta[maxn],low[maxn],stalen,num,color[maxn],dfnnum;
void tarjan(int u){
   
	dfn[u] = low[u] = ++dfnnum;
	sta[stalen++] = u; vis[u] = true;
	for(int i = head[u
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值