ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Tarjan算法与无向图连通性

2019-11-01 16:02:45  阅读:319  来源: 互联网

标签:Tarjan 联通 点双 割点 leq 算法 奇环 连通性 分量


割边/桥

定义:删去该边后,原图分裂成大于1个联通块

求解:对于边\(x \rightarrow y\),若\(low[y] > dfn[x]\),则\(x \rightarrow y\)是桥

易错:\(dfs\)时,带参数\(faId\),表示进入\(x\)的边。访问\(x\)到达的点时,略过\(faId\)

边双连通分量

定义:没有割边的极大子图

求解:去除所有割边

充要条件/性质:各边都至少存在于1个简单环中。(若某边仅在简单路径上,则有割边)

割点

定义:删去该点以及与该点相连的边之后,原图分裂成大于1个联通块

求解:

对于非根节点\(x\),若存在\(x \rightarrow y\),使得\(low[y] \geq dfn[x]\),则\(x\)是割点

对于根节点\(rt\),若\(rt\)的儿子数大于1,则\(x\)是割点

区别:正常的不访问\(fa\)的\(dfs\)

点双联通分量

定义:没有割点的极大子图

求解:\(dfs\)中维护1个栈。若\(x \rightarrow y\)时发现\(x\)为割点,将栈中元素出队至\(y\)。这些元素与\(x\)共同构成点双联通分量

区别:一个割点可能属于多个点双联通分量

充要条件/性质:任意两点都至少包含在1个简单环中。(假设两点间只有简单路径,则有割点)

应用

通过缩点等处理,简化问题

例题

AcWing 365

题意

给定1张\(n\)点\(m\)边的无向连通图,求解不在任何1个奇环中的点的个数。

\(1 \leq n \leq 1000 , 1 \leq m \leq 10^6\)

题解

引理1:不属于同1点双联通分量的点之间不可能存在环

简略证明:存在环,则环中没有割点,则可以合并点双联通分量,与极大性矛盾

引理2:在同1点双联通分量中,若存在1个奇环,则所有点都在至少1个奇环中

简略证明:若存在1个奇环,对于奇环外的任意点\(x\),一定能够跟该奇环上的2点形成至少1个环。(反证:若仅有简单路径,则该简单路径上有割点)。由此,奇环被分割成长度奇偶性不同的两部分,其中1个部分一定能跟\(x\)组合形成奇环。

由此,只需求出所有的点双联通分量,并在各个点双联通分量中通过染色法判定是否存在奇环。若不存在,累加点双联通分量的大小即可。时间复杂度\(O(n + m)\)。代码见此

标签:Tarjan,联通,点双,割点,leq,算法,奇环,连通性,分量
来源: https://www.cnblogs.com/littlewyy/p/11777554.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有