首页 > 其他分享 >Tarjan再学习

Tarjan再学习

时间:2024-09-23 20:36:38浏览次数:1  
标签:prime Tarjan 点双 连通 割边 割点 学习 边双

蓝书的那一套理论比较生硬,且不是很深刻,故重学Tarjan。AlexWei《图论Ⅰ》

相关定义

割点:在无向图中,删去使得连通分量数增加的点被称为割点

割边:在无向图中,删去使得连通分量数增加的边被称为割边

点双连通图:不存在割点的无向图。

边双连通图:不存在割边的无向图。

点双连通分量:一张图的极大点双连通子图称为点双连通分量(V-BCC),简称点双

边双连通分量:一张图的极大边双连通子图称为边双连通分量(E-BCC),简称边双

缩点:把一个连通分量等价为一个点的操作。边双和点双缩点后均得到一棵树,而强连通分量缩点后得到一张DAG。

基本性质

边双连通

考虑割边两侧的两个点 \(u,v\)。由于删去割边 \(u,v\) 不连通,所以这条割边在任何一条 \(u\) 到 \(v\) 的迹上,否则删去后 \(u,v\) 仍连通。

两点之间的所有必经边,就是连接它们所有迹的交。

在研究必经边时,重复经过一条边是不优的,所以只需考虑两点之间的迹(路径边集不重复)。

不难发现,割边和必经边的概念是完全等价的。\(u, v\) 双连通当且仅当 \(u, v\) 之间不存在必经边

断开一条割边会使连通块数 +1。断开所有割边,每个连通块中不含割边且不能再扩大,是原图的边双连通分量。

这说明边双连通分量由割边连接,边双缩点得到一颗树,每条边都是原图割边。

任意添加一条边 \((u, v)\),任意 \(u, v\) 简单路径上的边不再是割边了,即该路径上的所有边双会被缩成一个大边双。

传递性:若 \(u, v\) 双连通,\(v, w\) 双连通,则 \(u, w\) 双连通。

证明:\(u, v\) 之间迹的交集为空(没有必经边),空集与空集取交还为空,因此 \(u, w\) 之间没有必经边。

结论:边双的点集两两无交,每个点恰属于一个边双,根据传递性易证。

结论:对于边双内任意一条边 \((u,v)\),存在经过 \((u,v)\) 的回路;对于任意一点 \(u\),存在经过 \(u\) 的回路(除孤立点)。

证明:考虑边 \((u, v)\),将其删去后仍能得到一条 \(u, v\) 的路径,将该路径与 \((u, v)\) 拼起来,即可得到穿过 \(u, v\) 的回路。

点双连通

与边双不同,两个点双可能有交,例如 "8字形",中间的交点在两个点双都出现了。

因此点双不具有传递性。但如果两个点双有交,交点一定唯一,否则两个点双可以合并。

结论:若两点双有交,那么交点一定是割点。如果删去交点后两点双仍然连通,则可以合并。

引理:若两点点双连通,那么包含这两点的点双唯一。不唯一则出现两个交点,矛盾。

现在已经知道点双交点是割点,那么割点一定是点双交点吗?删去割点,考虑割点的两个邻居 \(u, v\)。

根据定义,\(u, v\) 不连通,则 \(u, v\) 不属于一个点双。

结论:一个点是割点当且仅当属于超过一个点双(上面充分性和必要性都有证明)。

结论:由一条边直接相连的两点点双连通。

推论:一条边恰属于一个点双。\((u, v)\) 连接的 \(u, v\) 属于一个点双,如果他们同时属于另一个点双则产生矛盾。

正如割边是连接边双的「桥梁」,割点也是连接点双的桥梁。

用一个点代表一个点双,并将这个代表点向与之相连的割点连边,得到块割树

考虑删去点双中的一个点 \(x\),剩下所有点连通。

如果度数大于 \(1\),对于其不同的两个邻居 \(u, v\),将新图中 \(u, v\) 的路径与 \(x\) 相连,得到经过 \(x\) 的简单环。

若度数等于 \(1\),则整个点双为"一边连两点"的平凡形态,即只可能在 \(n = 2\) 的时候出现。

如果 \(n \ge 3\) 且存在 \(d(u) = 1\),设与其直接相连的唯一点为 \(v\),删去 \(v\) 后 \(u\) 与整张图不连通,矛盾。

结论:对于 \(n \ge 3\) 的点双中任意一点 \(u\),存在经过 \(u\) 的简单环。

Tarjan求割点

无向图DFS树

给定无向连通图 \(G\),从 \(r\) 开始 dfs。取出进入每个点时的边 \((fa_i,i)\) 称为树边,其它为非树边,得到以 \(r\) 为根的树。

无向图 DFS 树的性质:

  • 祖先后代性:任意非树边两端具有祖先后代关系。
  • 子树独立性:节点的每个儿子的子树之间没有边(和上一条性质等价)。
  • 时间戳区间性:子树时间戳为一段连续区间。
  • 时间戳单调性:节点的时间戳小于其子树内的时间戳。

后两点比较显然,证一下前两点,对于 \(u\) 所有的出边 \(v\):

\(v\) 还没遍历到,未来一定在 \(u\) 的子树中(不一定是儿子);\(v\) 已经被遍历到,\(u\) 对于 \(v\) 来说是没被遍历,\(u\) 在 \(v\) 的子树中。

非根节点的割点判定

记 \(x\) 的子树 \(T(x)\) 为 \(x\) 在 DFS 树上的子树,记 \(T(x)^\prime = V\setminus T(x)\),即整张图除 \(T(x)\) 以外的部分。

设 \(x\) 不为根,则 \(T^\prime(x) \ne \emptyset\),

删掉 \(x\) 之后 \(T(x)^\prime\) 通过树边相连仍然连通,若 \(x\) 是割点则存在 \(z \in T^\prime(x)\) 与 \(y\) 不连通,显然 \(y \in T(x)\)。

由于 \(y, z\) 不连通,\(T^\prime(x)\) 连通,则 \(y\) 与整个 \(T^\prime(x)\) 不连通。反之如果存在 \(y\) 与 \(T^\prime(x)\) 不连通,\(x\) 一定是割点。

条件等价于任意 \(y \in T(x)\) 不经过 \(x\) 能到达点均属于 \(T(x)\)。

如果 \(y \in T(x)\) 不经过 \(x\) 就与 \(T^\prime(x)\) 连通,一定存在 \(y\) 到 $v \in T^\prime(x) $ 的路径,使得 \(v\) 是路径中第一个属于 \(T^\prime(x)\) 的点。

设 \(u\) 为路径中倒数第二个点,有 \(u \in T(x)\)。如果 \((u, v)\) 是树边,则 \(u = x\),矛盾。

所以 \((u, v)\) 是非树边,\(v\) 是 \(u\) 的祖先,同理 \(v\) 也是 \(x\) 的祖先,一定有 \(d_v < d_u\)。

进一步的,由于 \(x\) 的不同儿子之间没有非树边(子树独立性),设 \(x\) 的儿子 \(y^\prime\) 是 \(y\) 的祖先,则 \(u \in T(y^\prime)\)。

因此,如果 \(y\) 能够不经过 \(x\) 和 \(T^\prime(x)\) 连通,则存在 \(u \in T(y^\prime)\) 满足 \(u\) 有一条非树边与 \(x\) 的祖先直接相连。

设 \(f_x\) 表示 \(x\) 通过非树边能(直接)到达的最小时间戳。

\(x\) 不是割点的条件可以写成:对于任意儿子 \(y^\prime\),都存在 \(u \in T(y^\prime)\),使得 \(f_u < d_x\)。

如果存在 \(f_u < d_x\),\(u\) 直接与 \(T^\prime(x)\) 相连,\(y^\prime\) 的其他点先通过树边先 \(u\) 相连,再间接与 \(T^\prime(x)\) 连通;

否则删掉 \(x\) 后任意 \(y^\prime\) 子树内的点都不与 \(T^\prime\) 连通,\(x\) 是割点。

得到非根节点的割点判定法则:如果存在儿子 \(y^\prime\),使得 \(\min_{ u \in T(y^\prime)}f_u \ge d_x\),则 \(x\) 是割点。

设 \(g_x\) 表示 \(x\) 子树内 \(f_u\) 的最小值(low 数组的真正含义):

\[\begin{aligned} f_x &= \min_{(x, y) \in E\land y\notin \text{son}(x)}d_y\\ \\ g_x &= \min\big(\min_{y \in \text{son}(x)}g_y,\ f_x \big) \end{aligned} \]

当且仅当存在 \(x\) 的儿子 \(y\) 满足 \(g_{y} \ge d_x\),\(x\) 是割点。

根据上述 DP 的定义,\(g_x\) 显然是初始化成 \(\inf\)。当然初始化成 \(d_x\) 也不会有错,代码上只是多一行少一行的区别。

(感觉听魏老师讲完,整个人都清澈了!)

根的割点判定法则

若 \(x\) 在 DFS 树上有 \(> 1\) 个儿子,根据子树独立性,\(x\) 的儿子两两不连通,\(x\) 是割点。

如果 \(x\) 只有一个儿子 \(y\),删掉 \(x\) 后 \(T(y)\) 仍然连通,\(x\) 不是割点。

割边求法

Tarjan

探究 \(e = (u, v)\) 是割边的充要条件。

树边使整张图连通,割断非树边不影响连通性,因此 \(e\) 是割边的一个必要条件是 \(e\) 是树边。

不妨设 \(v\) 是 \(u\) 的儿子,如果割点 \(e\) 后图不连通,只能分成 \(T(v)\) 和 \(T^\prime(v)\) 两部分,因为其内部都通过树边连通。

这说明 \(T(v)\) 的所有节点都必须经过 \(e\) 才能到达 \(T^\prime(v)\)。

如果存在 \(w \in T(v)\),\(w\) 能过通过一条非树边到达 \(u\) 或其祖先,则 \(e\) 不是割边,即 \(\min_{w \in T(v)} f_w = g_v \le d_u\)。

割边判定法则:对于树边 \(e = (u, v)\),\(v\) 是 \(u\) 的儿子,\(e\) 是割边当且仅当 \(g_v > d_u\)。

树上差分

已经知道树边是割边的一个必要条件。

如果存在非树边 \((u, v)\),那么搜索树上 \(u \to v\) 的简单路径上所有树边都不是割边了。

怎么刻画一条树边有没有被非树边覆盖?把边 \((i, fa_i)\) 的覆盖次数当做 \(i\) 的点权,树上差分后求子树和。

边双连通分量缩点

由于每个点恰属于一个边双,把每个割边割断后剩下的每个连通块都是一个边双。

可以先 Tarjan 给所有割边打上标记,再 dfs 找连通分量,但太麻烦。

标签:prime,Tarjan,点双,连通,割边,割点,学习,边双
From: https://www.cnblogs.com/Luxinze/p/18427831

相关文章

  • 英语及口语学习路线图
    基础积累阶段学习重点:音标学习:掌握准确的音标发音是口语的基础,能够帮助正确地读出单词,也有利于后续听力的提升。比如区分[i:]和[ɪ]、[θ]和[ð]等容易混淆的音标。基础词汇积累:积累日常生活中常用的基础词汇,包括名词(如动物、食物、生活用品等)、动词(如行为动作相关的词汇......
  • 计算机网络与协议学习路线图
    基础理论学习阶段计算机网络概述:学习内容:了解计算机网络的定义、发展历程、功能、分类等基本概念,建立对计算机网络的整体认知。比如知道什么是局域网、广域网、城域网,以及它们之间的区别和应用场景。学习时间:建议花费1-2周。网络体系结构:学习内容:深入学习OSI七层模型(物理......
  • [深度学习]神经网络
     1人工神经网络全连接神经网络2激活函数隐藏层激活函数由人决定输出层激活函数由解决的任务决定:二分类:sigmoid多分类:softmax回归:不加激活(恒等激活identify)2.1sigmoid激活函数x为加权和小于-6或者大于6,梯度接近于0,会出现梯度消失的问题即使取值[-6......
  • 零基础小白如何入门CTF,看这一篇就够了(附学习笔记、靶场、工具包)_ctf入门
    CTF简介:CTF(CaptureTheFlag)中文一般译作夺旗赛,在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互相发起真实攻击进行技术比拼的方式。发展至今,已经成为全球范围网络安全圈流行的竞赛形式,2......
  • 算法与数据结构学习路线图
    基础阶段编程语言基础:选择一门编程语言作为学习算法与数据结构的工具,如Python、Java、C++等,掌握其基本语法、数据类型、控制结构、函数等。这是后续学习的基础。学习时间:建议花费1-2个月左右打牢基础。学习网站及资源:菜鸟教程:网址为https://www.runoob.com/,提供各种编程......
  • 这个大纲可以根据具体需求进行调整,帮助学习者深入掌握 Excel 的高级功能。这个大纲为
    Excel初级使用教程大纲一、Excel简介Excel的基本概念Excel的主要功能与应用领域二、界面与基础操作Excel界面介绍菜单栏、工具栏、工作表单元格、行、列的概念工作簿与工作表的管理创建、保存和打开工作簿工作表的添加、删除、重命名三、数据输入与编辑......
  • 【第十六章:Sentosa_DSML社区版-机器学习之生存分析】
    【第十六章:Sentosa_DSML社区版-机器学习之生存分析】16.1加速失效时间回归1.算子介绍        加速失效时间回归模型Acceleratedfailuretime(AFT)是一个监督型参数化的回归模型,它可以处理删失数据。它描述了一个生存时间的对数模型,所以它通常被称为生存分析的对......
  • python+flask计算机毕业设计基于微信小程序的技能交换学习平台(程序+开题+论文)
    文件加密系统的设计与实现tp835本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着互联网技术的飞速发展和智能手机的普及,移动学习已成为当代社会不可或缺的一部分,尤其是微信小程序凭借......
  • 【前端学习】HTML基础学习
    超级简洁的html基础教程来啦!一、HTML简介 1、什么是HTML??HTML的全称为超文本标记语言,是一种标记语言。它包括一系列标签,通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为一个逻辑整体。HTML文本是由HTML命令组成的描述性文本,HTML命令可以说明文字,图形......
  • 游戏开发学习路线图
    基础阶段学习重点:编程语言基础:掌握一种或多种游戏开发常用的编程语言,如C++、C#、Java、Python等。对于C++,要深入理解指针、内存管理、面向对象编程等概念;对于C#,需掌握基本语法、面向对象特性、集合操作等。数据结构与算法:学习常见的数据结构(如数组、链表、栈、队列、树、图......