首页 > 其他分享 >tarjan 速成

tarjan 速成

时间:2024-12-26 21:08:33浏览次数:2  
标签:tarjan Sub 速成 访问 dfn low 节点

如题,这是一个只适合快速了解的文章,如果要学习 tarjan 那么请阅读其他文章。

用 \(Sub(i)\) 表示 \(i\) 的子树,那么 \(low_i\) 表示 \(Sub(i)\) 中的节点和 \(Sub(i)\) 中的节点经过一条非树边可以到大的节点中 \(dfn\) 的最小值,用 \(dfn_i\) 表示 \(i\) 的时间。

从随便一个节点开始向下跑 dfs,假设现在访问到了 \(x\),那么 \(dfn_x\).

访问所有的儿子,如果儿子没有访问过那么儿子进行递归操作,接着用儿子的 \(low\) 更新 \(low_x\)。

如果访问过了这个儿子,那么用儿子的 \(dfn\) 更新 \(low_x\)。

强连通分量

对于强连通分量,每一次更新 \(dfn\) 时把 \(x\) 加入栈中。

在所有操作结束之后,如果 \(low_x=dfn_x\) 那么一直访问栈内元素直到访问到 \(x\) 结束操作。

访问到的所有的点构成了一个强连通分量,需要注意没有弹出操作。

割点

talk 没有直接给代码来的快。

void dfs(int x){
    low[x]=dfn[x]=++tot;
    int son=0;
    for(int i:v[x]){
        if(!dfn[i]){
            son++,dfs(i);
            low[x]=min(low[x],low[i]);
            if(low[i]>=dfn[x]&&x!=rt) s.insert(x);
        }
        else{
            low[x]=min(low[x],dfn[i]);
        }
    }
    if(son>=2&&x==rt) s.insert(x);
}

割边

把 \(low_i\ge dfn_x\) 改成 \(low_i\gt dfn_x\) 就行了,而且不用判断根节点的情况。

标签:tarjan,Sub,速成,访问,dfn,low,节点
From: https://www.cnblogs.com/liudagou/p/18634191

相关文章

  • 速成黑客大佬?30天网络安全零基础自学宝典!新手必看
     很多人上来就说想学习黑客,但是连方向都没搞清楚就开始学习,最终也只是会无疾而终!黑客是一个大的概念,里面包含了许多方向,不同的方向需要学习的内容也不一样。网络安全学习路线&学习资源我给大家整理了一些网络安全的资料,大家不想一个一个去找的话,可以参考一下这些......
  • 速成黑客大佬?30天网络安全零基础自学宝典!新手必看
     很多人上来就说想学习黑客,但是连方向都没搞清楚就开始学习,最终也只是会无疾而终!黑客是一个大的概念,里面包含了许多方向,不同的方向需要学习的内容也不一样。网络安全学习路线&学习资源我给大家整理了一些网络安全的资料,大家不想一个一个去找的话,可以参考一下这些资料......
  • 模板Tarjan
    Tarjan模板因为每次写Tarjan都会写挂,所以整理了一些模板。主要的证明就跳过了,主要区分不同模板的差异。有向图和无向图有向图和无向图的实现有时候会有区别,因为建出DFS树之后,有向图可能有横叉边,但是无向图不会(显然),所以有些细节需要注意。而且无向图判重边会比较麻烦。无向图......
  • Python速成脚本小子(附20道基础题)
    当今社会,编程已经成为了一种必备的技能。而Python,作为一门高效简洁的编程语言,备受大家的喜爱。Python语言易学易用,非常适合初学者入门,同时也是各大公司招聘的必备技能之一。那么,如何快速入门Python,成为一个Python速成脚本小子呢?以下是一些建议:1.学习基本语法Python语法......
  • 组会优化期末速成笔记
    组合优化简介复习该部分主要是单纯形法,动态规划,最大流问题等,使用单纯形法可以解决很多问题。单纯形法对偶问题整数规划背包问题装箱问题指派问题作业调度问题最大流问题动态规划......
  • 速成黑客大佬?30天网络安全零基础自学宝典!新手必看
     很多人上来就说想学习黑客,但是连方向都没搞清楚就开始学习,最终也只是会无疾而终!黑客是一个大的概念,里面包含了许多方向,不同的方向需要学习的内容也不一样。网络安全学习路线&学习资源我给大家整理了一些网络安全的资料,大家不想一个一个去找的话,可以参考一下这些资料哈......
  • 图论--强连通分量(tarjan)
    一.DFS森林和强连通分量(SCC)强连通:u->v,v->u,那么u和v就是强连通的,即u和v互相可达强连通分量:一个集合内的所有点都互相可达二.tarjan算法#include<bits/stdc++.h>#definexfirst#defineysecond#defineendl'\n'#defineintlonglongusingnamespacestd;......
  • 15届蓝桥杯刷题速成
    目录前言[1.回文判定](https://www.lanqiao.cn/problems/1371/learning/?page=1&first_category_id=1&name=%E5%9B%9E%E6%96%87%E5%88%A4%E5%AE%9A)代码题解2.小明的背包代码题解3.排序4.小明的彩灯5.走迷宫6.蓝桥公园[7.蓝桥王国](https://www.lanqiao.cn/problems/......
  • 【速成】LLM大模型最新学习路线—从入门到实战!
    大语言模型学习路线:从入门到实战在人工智能领域,大语言模型(LargeLanguageModels,LLMs)正迅速成为一个热点话题。本学习路线旨在为有基本Python编程和深度学习基础的学习者提供一个清晰、系统的大模型学习指南,帮助你在这一领域快速成长。前排提示,文末有大模型AGI-CSDN独......
  • Tarjan详解
    Tarjan算法详解本文介绍利用Tarjan算法求无向图割边、割点、点双连通分量和边双连通分量。一些概念介绍图论相关概念,注意有些概念适用于有向图,但是本文均特指无向图。连通图上两个点至少有一条路径连接,则称两个点连通连通图图上任意两个点都是连通的,则称该图为连通图连通......