尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Tarjan算法
我们先来了解一下Tarjan算法的作用Tarjan算法解决的是在有向图里找连通分量的问题连通分量听起来很高大上对吧但是实际上他就是一堆点它们两两之间可以互相到达像这样1 - 2 - 3 - 4 ^ | | | |--------------| 这里1,2,3,4就是一个连通分量因为从任意一个点出发都能绕一圈到达另一个点没错Tarjan实现的问题就是这么简单可是我们能用瞪眼法看出来但是机器做不到我们该怎么用一个高效的算法解决这个问题呢Tarjan算法的核心思想Tarjan用一次DFS就可以找连通分量我们DFS的时候会有两个很重要的编号我们在这里提前埋个伏笔dfn[u],low[u]它们非常的重要dfn[u]表示点u是第几个被访问到的如果通俗一点就是dfs序还是举一个例子吧假如说这棵树是这样的那么它的dfs序就是dfn[1]1 dfn[2]2 dfn[3]3 dfn[4]4 dfn[5]5我们理解了dfn[]之后需要理解low[]它十分重要。low[u]表示从u出发沿着dfs序往下走最多再通过一条返祖边能够到达的最早的dfn概念返祖边就是从图里抠出来了一颗树这棵树上有一个节点可以直接通过一条边连接到它的祖先哎呀其实说人话就是low[u]记录u或u的后代、最早能绕回哪一个祖先我们可以从这一张图片来理解low[u]看到这张图大众第一次看可能会觉得low[4]1实则不是的low[4]2因为是“最多通过一条返祖边”那么说到这里我们就可以开始学习新算法了我就问一个问题假如说有一个点u使得dfn[u]low[u]我们能不能确定它是某一个连通分量这里思路跳了实在想不出就继续看吧我们还是回到这个例子1 - 2 - 3 - 4 ^ | | | |--------------|从1开始DFS1访问2 2访问3 3访问4 4又能访问1于是dfn[1]1 dfn[2]2 dfn[3]3 dfn[4]4;但是4能回到1所以low[4]1然后3的儿子4能回到12的儿子3能通过4回到1所以low[2]1 low[3]1low[1]自己肯定是等于1的这个没啥好说的最后我们发现dfn[1]low[1]这真是一个惊天的发现这说明了1是这一整个连通分量里最早被访问到的点也就是一整个连通分量的“根”呃你就这么理解吧于是Tarjan就把栈从栈顶一直弹到1的点拿出来他们就是一个连通分量1,2,3,4懵逼的同学们太懵逼了不是这从哪里又冒出来一个栈啊其实是这样的DFS的过程中有点已经访问过了但是我们不知道它们属于哪一个连通分量所以Tarjan用一个栈保存这些“还没分组“的点访问一个点的时候把它压栈st[top]u; ins[u]true;其中有一个ins[u]表示u现在是否还在栈里当确定某个点u是连通分量的”根“也就是dfn[u]low[u]就开始弹栈while(true){ int xst[top--]; ins[x]false; id[x]scc; if(xu) break; }从栈顶一直弹到u为止这些点就是一个连通分量Tarjan的DFS过程所以Tarjan的核心代码就是这样的voidTarjan(intu){dfn[u]low[u]tm;st[top]u;ins[u]true;for(intv:g[u]){if(!dfn[v]){Tarjan(v);low[u]min(low[u],low[v]);}elseif(ins[v]){low[u]min(low[u],dfn[v]);}}if(dfn[u]low[u]){scc;while(true){intxst[top--];ins[x]false;id[x]scc;if(xu)break;}}}典例演习我这里有两道例题板子题你们可以拿来练练手反正我后面会出博客讲解https://www.luogu.com.cn/problem/P3387纯模板https://www.luogu.com.cn/problem/P2746挺有意思的一道题
RELATED

相关推荐

从 Excel 营业流水到可验证测试订单:测试数据导入工具工程复盘

从 Excel 营业流水到可验证测试订单:测试数据导入工具工程复盘

Engineering Case Study RCA Postmortem Excel Import Test Data MySQL脱敏说明:本文已替换真实小程序、门店、手机号、订单号、数据库连接和业务金额;保留真实的数据关系、算法、故障原因与修复逻辑。一、背景:需求不是“导 Excel”&am…

📅 2026/9/29 11:49:53
Node.js 中使用 Mongoose 的完整步骤与配置方法:TaoToken 统一 Key 接入实践

Node.js 中使用 Mongoose 的完整步骤与配置方法:TaoToken 统一 Key 接入实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/9/29 11:49:53
服装智能制造大会上的AI质检案例分享

服装智能制造大会上的AI质检案例分享

1. AI服装制造场景 在服装智能制造大会上,AI质检成为最受关注的议题之一。传统人工质检依赖老师傅的经验与肉眼判断,效率低、漏检率高、招工难,已成为制约服装工厂产能与品质的瓶颈。随着计算机视觉与深度学习技术的成熟,AI质检正…

📅 2026/9/29 11:49:53
MORE NEWS

更多资讯

📰

你管这破玩意叫 MCP?用 TaoToken 统一 Key 打通 Cline 配置

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📰

EtherCAT实时以太网:从站开发与多轴伺服同步实战

1. EtherCAT到底解决了什么问题搞工业自动化的朋友应该都有体会,早年间设备里跑的现场总线五花八门——Profibus DP、CANopen、Modbus RTU、DeviceNet……每家的PLC、伺服、变频器都有自己的脾气,想把不同品牌的设备拧到同一条总线上,经常得写…

📰

邮件安全四层防线:从账号加固到SPF/DKIM/DMARC部署

1. 邮件系统安全到底在防什么:先看清对手和战场1.1 一封邮件能捅多大娄子在动手加固之前,我建议大家先花几分钟想一想:邮箱里到底有什么值得被盯上?很多人觉得“我账号里没什么机密,黑客不会瞄上我”,这是我…

📰

使用 AWS SDK for Rust 调用 AWS IoT Greengrass V2:ListCoreDevices 示例实战

示例工程教程后端 【免费下载链接】aws-doc-sdk-examples Welcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below. 项目地…

📰

常见网络攻击原理与防御:从SQL注入到DDoS的实战指南

简介:这是一份面向网络安全初学者、高校信息安全专业学生及安全培训学员的教学型PPT资料,系统梳理了最常见网络攻击的原理与防范手段。内容以典型攻击步骤为主线,覆盖预攻击探测、漏洞扫描、木马攻击、拒绝服务攻击、欺骗攻击、蠕虫病毒攻击等…

📰

Sass 安装与命令行编译:用 TaoToken 统一 Key 打通 SCSS 工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬