Skip to content

泉州一中信息学Blog

信息学奥赛技术分享博客

  • 登录
  • 小学oj
  • 中学oj
  • 测试页面1
  • Toggle search form

中山集训8.7

Posted on 2025年8月7日2025年8月8日 By 黄, 涵波 中山集训8.7无评论

早上自习

今天没比赛,自己复习一下Tarjan,试图搞懂原理,便于记忆

Tarjan 求强连通分量

模板题 Luogu B3609
之前在常州的时候为了方便,打的是Kosaraju算法(其实这个我也忘了)
但没事,我们今天主要学Tarjan

以下给出几个定义(后面也会用到)

首先,强连通分量是指在有向图中,其子图中各顶点两两连通,且包含的点尽可能的多

怎么理解后半句呢?比如上面这个图,虽然由(1,2,3)构成的环好像也符合两两连通的条件,但是在加入(4,5)后,构成的图(1,2,3,4,5)仍然符合两两连通,因此(1,2,3)就不是一个强连通分量,但(1,2,3,4,5)是

(特别地,孤立点也是强连通分量)

接下来是关于DFS的

首先是DFS生成树,是指将图经过DFS遍历后,遍历时真正经过的边形成的树
这样就可以把一个图中的边分成以下几种边:

1.树边:在DFS树上的边
2.回边(反祖边):由后代指向根节点的边
3.前向边:由祖先指向后代(非儿子)的边
4.以上三种边都不是的即横向边

接下来会用到的数组或变量的含义

dfs_clock:时间戳
dfn:访问节点的次序
T(u):以u为根节点的子树 特别地,记T为DFS生成树
low(u)=min(dfn(v),low(u)) v∈T(u)
初始化:dfn(u)=low(u)=dfs_clock

对于low(u)的更新:
我们发现可以递归地思考,有
low(u)=min(low(v),low(u)) v∈T(u)
但对于反祖边,我们需要特别处理
low(u)=min(dfn(v),low(u)) v∈T(u)

下面来自OI_WIKI

我们给出结论,当我们将访问过的节点用栈存储后,在回溯的过程中,若发现dfn(u)=low(u),则u至栈顶的顶点属于同一个强连通分量

证明如下:
若有强连通分量,则必然在搜索时会遇到回边,因此每次low数组更新时,总无法有dfn(u)=low(u),只有最开始被访问到的该强连通分量的节点保留dfn(u)=low(u)的关系

好了,我们可以自己实现代码了
人生第一次不看模板写出Tarjan算法模板

压行看着有点难受,凑合看吧,但理解原理后,确实打起来感觉简单不少

下午自习 割点与桥+双连通分量

以下图不分有向与无向,对于有向图连通的说法,指有向图强连通

割点+点双连通分量

概念:
割点:将该点删除后使得原连通图分裂为多个子图的点即割点
点双连通:不存在割点的连通图
点双连通分量:图中极大的点双连通子图(此处对于分量/极大的理解类比强连通分量)

对于割点的求法,判断是否有low(v)>=dfn(u),v∈T(u)若有,则u为割点
但是对于T的根节点root(后面简记为R),无法用此法判断,因此我们需要单独看,若R的在DFS树上的度数不为1,则R是割点

证明如下:
对于第一种情况,若low(v)>=dfn(u)说明v只与T(u)中的点有连边,若将u删去,则必然会同不在T(u)中的点断开联系,因此u是割点

对于情况二,若R在DFS树上的度大于1,显然R会是割点

模板题 Luogu P3388

Code:

对于点双连通分量的求法,我们先看一下OI_WIKI给的一些性质

核心Code:

桥(割边)+边双连通分量

概念:
割边(桥):指将该边删去后使得原连通图分裂为多个子图的边
边双连通:不存在割边的连通图
边双连通分量:图中极大的边双连通子图

对于桥的求法

若有重边,无论哪条重边都不可能为桥,这种情况单独判断即可

模板题 Luogu P1656
以下是无重边求桥版的

Code:

边双连通分量的求解:
我们可以根据定义求解,注意到边双连通分量中不存在桥,因此我们可以先将所有的桥求出,再用DFS求解边双连通分量

但是还有另一种思路

模板题 Luogu P8436

Tarjan小结

我认为Tarjan算法的核心思想是利用在图中遍历时dfn和low,根据如割点、割边等它们的一些性质,发现low与dfn之间的关系,利用这种关系进行判断是否为我们所要求的,我认为最重要的是对dfn和low的更新的记忆,以及这些概念的性质,判断方式的记忆

晚自习

不行了,Tarjan模板快打吐了🤮

看OI_WIKI了,博客就水到这里,拜拜

训练日志, 图论, 图的连通

文章导航

Previous Post: 中山8.6
Next Post: 21 Days Training // Day 13

发表回复 取消回复

要发表评论,您必须先登录。

2025年 12月
一 二 三 四 五 六 日
1234567
891011121314
15161718192021
22232425262728
293031  
« 8月    

2024常州 Class Classic OI Problems Contest cqr的长乐集训2023 CZYZ LOC New Game NOI NOIP Password Protected PM_PK Preview Problems Retrospect Selfmade Qusetion STL The end Training Uneasy Problem 蒟蒻 通报

  • 训练日志
  • 链表
  • 入门
  • 模拟
  • dfs序
  • 并查集
  • spfa
  • 最小割
  • 矩阵树定理
  • 仙人掌
  • BSGS
  • 凸包
  • 回文自动机
  • 递推与动归
  • 堆
  • 莫队算法
  • ST表
  • Treap
  • 树套树
  • 可持久化线段树
  • 初赛
  • 搜索
  • 贪心
  • 深度优先搜索
  • 欧拉图
  • dijkstra
  • 费用流
  • 哈夫曼树
  • kruskual
  • 置换
  • 旋转卡壳
  • KMP
  • 区间动归
  • STL
  • 链表
  • 可并堆
  • sply
  • 主席树
  • 可持久化字典树
  • 算法
  • 动态规划
  • 构造
  • 广度优先搜索
  • 最短路
  • floyd
  • 最大流
  • 虚树
  • prim
  • 筛法
  • 半平面交
  • 字典树
  • 背包动归
  • 基础数据结构
  • 分块
  • 线段树
  • 替罪羊树
  • K-DTree
  • 图论
  • 二分法
  • 迭代搜索
  • 拓扑排序
  • 有上下界网络流
  • 生成树
  • 快速幂
  • 后缀数组
  • 树形动归
  • 哈希表
  • 中级数据结构
  • 平衡树
  • 可持久化数据结构
  • 数据结构
  • 三分法
  • 启发式搜索
  • 图的连通
  • 点分治
  • 博弈论
  • AC自动机
  • 状压动归
  • 单调栈
  • 树状数组
  • 高级数据结构
  • OI资料
  • 数学
  • 高精度
  • 差分约束
  • 树上倍增
  • 素数测试
  • 后缀自动机
  • 数位动归
  • 单调队列
  • 新闻
  • 几何
  • 随机化
  • 二分图染色
  • 树链剖分
  • 欧拉函数
  • manacher
  • 斜率优化
  • 离线处理
  • 信息学奥赛学长风采
  • 字符串
  • 二分图匹配
  • prufer编码
  • 卡特兰数
  • 密码学
  • 决策单调
  • 赛后总结
  • 其他
  • 2-SAT
  • 最近公共祖先
  • 矩阵乘法
  • 记忆化搜索
  • 网络流
  • Link cut tree
  • 排列组合
  • 树
  • 高斯消元
  • 乘法逆元
  • 容斥原理
  • 调和级数
  • 概率与期望
  • 模线性方程组
  • 莫比乌斯反演
  • 快速傅里叶变换
  • 扩展欧几里德
  • 最大公约数与最小公倍数

近期文章

  • 中山纪念中学 Day21
  • 中山集训8.15 LAST DAY+集训小结
  • GDNOJ – DAY 18
  • 中山8.14
  • 2025暑假中山集训Day20——8.14

近期评论

归档

  • 2025年8月
  • 2025年7月
  • 2025年2月
  • 2025年1月
  • 2024年11月
  • 2024年10月
  • 2024年9月
  • 2024年8月
  • 2024年7月
  • 2024年3月
  • 2024年2月
  • 2024年1月
  • 2023年12月
  • 2023年11月
  • 2023年10月
  • 2023年9月
  • 2023年8月
  • 2023年7月
  • 2023年3月
  • 2023年2月
  • 2023年1月
  • 2022年12月

Copyright © 2025 泉州一中信息学Blog.

Powered by PressBook WordPress theme