我是按照这里的思路来的。这个博文只是感性理解。

递归树

关于递归树,篇博文讲的很好,我只是给自己总结一下。

定义vis数组,在dfs连通图时赋予它们不同的含义:

  1. vis=0,表示这个点没有被访问。
  2. vis=1,表示这个点被访问了,但是它的孩子还没有访问完。
  3. vis=2,表示这个点被访问了,并且它的孩子访问完了。

一个连通图,一定可以表示成一个递归树,加上一些边。这些边的种类有:

  1. 树边,也就是递归树上的边。表现为访问(u, v)时,\(vis[v]=0\)。
  2. 回边,是一个点连向它递归树上的祖宗的边。表现为\(vis[v]=1\)。
  3. 前向边,是一个点连向它递归树上的子孙后代的边。表现为\(vis[v]=2\)。
  4. 横边,是一个除了前三种边以外的边,也就是说u和v没有什么祖宗关系。表现为\(vis[v]=2\)。

一个强连通的东西,必定在一棵递归树上,不会分散到多个上。不然那东西就不连通了,想要强连通更是不可能。

对了,如果将dfs访问到的时间,给递归树上的点编号,一个点的祖先的编号一定比这个点小。

tarjan搞一次出栈的一定是一个强连通的东西

还记得tarjan里,判断一个点是否出栈的依据吗?就是\(dfn[u]=low[u]\)。这意味着在u的子结点中,没有回往u以上的边,不然\(low[u]<dfn[u]\)。所以根据tarjan算法,如果u出栈,出栈的东西中编号最小的就是u。出栈的东西应该类似于这样(没画有向边,所以脑补吧):

也就是说,一个节点只有间接连向u,才能和u组成一个强连通的东西。这导致强连通分量在递归树上,其实就是一堆链的集合体,也就是树。

重点来了。如果tarjan搞出来的东西中,有一些点不和其它点强连通,说明它不能间接连向u,而是会间接连向u的一个儿子v。如果\(low[v]<dfn[v]\),这个点又可以间接连向\(low[v]\)...,以此类推,最终连向一个可以出栈的点,那个点u的是儿子。这就证明了,一次出栈搞出来的东西,和u都是强连通的。

tajan一次搞出来的,一定是一个强连通分量

这个标题和前面哪一个的区别是什么呢?就是一个是“东西”,一个是“分量”。分量意味着它大的不能再大了。所以这里要证明(弥天大雾,其实我这个根本不算证明)的,就是一次tarjan搞出来的,最小结点为u的强连通分量中,不会有其它点被遗漏。至于这个证明,我贴一个引用过来:

假设出栈的部分不完整,则本应该在这次出栈的点可能存在于栈的哪些部分呢?
1.之前出栈的部分
2.还没有入栈的部分
3.还没有出栈的部分
首先看2,不可能。因为假如没有入栈,说明这些点没有在这棵深度优先搜索树中,假如这些点在本该在该强连通分量中,则和定理1相违背,所以情况2中不可能包含本应该出栈的强连通分量中的点。再看3,也不可能。3中的点的dfn 和 low都分别小于本次出栈的点的dfn和low,也就说明本次出栈的点都无法访问到还没有出栈的点,所以情况3中不可能包含本应该出栈的强连通分量中的点。最后看情况1,其实情况1和情况3是类似的,之前出栈的部分A如果和本次出栈的强连通分量B可以组成更大的强连通分量,这就等价于,以之前出栈的强连通分量A为视角,亦是说A是不完整的,A中缺少的部分在还未出栈的节点和还没有访问的节点之中。这和之前的情况2,情况3推导矛盾,所以,情况1也不可能。

tarjan求强连通分量的思考的更多相关文章

  1. UESTC 901 方老师抢银行 --Tarjan求强连通分量

    思路:如果出现了一个强连通分量,那么走到这个点时一定会在强连通分量里的点全部走一遍,这样才能更大.所以我们首先用Tarjan跑一遍求出所有强连通分量,然后将强连通分量缩成点(用到栈)然后就变成了一个D ...

  2. tarjan求强连通分量+缩点+割点以及一些证明

    “tarjan陪伴强联通分量 生成树完成后思路才闪光 欧拉跑过的七桥古塘 让你 心驰神往”----<膜你抄>   自从听完这首歌,我就对tarjan开始心驰神往了,不过由于之前水平不足,一 ...

  3. Tarjan求强连通分量,缩点,割点

    Tarjan算法是由美国著名计算机专家发明的,其主要特点就是可以求强连通分量和缩点·割点. 而强联通分量便是在一个图中如果有一个子图,且这个子图中所有的点都可以相互到达,这个子图便是一个强连通分量,并 ...

  4. tarjan求强连通分量+缩点+割点/割桥(点双/边双)以及一些证明

    “tarjan陪伴强联通分量 生成树完成后思路才闪光 欧拉跑过的七桥古塘 让你 心驰神往”----<膜你抄>   自从听完这首歌,我就对tarjan开始心驰神往了,不过由于之前水平不足,一 ...

  5. HDU 1827 Summer Holiday(tarjan求强连通分量+缩点构成新图+统计入度+一点贪心思)经典缩点入门题

    Summer Holiday Time Limit: 10000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  6. CCF 高速公路 tarjan求强连通分量

    问题描述 某国有n个城市,为了使得城市间的交通更便利,该国国王打算在城市之间修一些高速公路,由于经费限制,国王打算第一阶段先在部分城市之间修一些单向的高速公路. 现在,大臣们帮国王拟了一个修高速公路的 ...

  7. UVALive 4262——Trip Planning——————【Tarjan 求强连通分量个数】

    Road Networks Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Stat ...

  8. tarjan求强连通分量(模板)

    https://www.luogu.org/problem/P2341 #include<cstdio> #include<cstring> #include<algor ...

  9. Tarjan求强连通分量、求桥和割点模板

    Tarjan 求强连通分量模板.参考博客 #include<stdio.h> #include<stack> #include<algorithm> using n ...

随机推荐

  1. Java for LeetCode 117 Populating Next Right Pointers in Each Node II

    Follow up for problem "Populating Next Right Pointers in Each Node". What if the given tre ...

  2. jqueryeasyUI dialog 弹出窗口超出浏览器,导致不能关闭的bug解决方案

    jqueryeasyUI dialog 弹出窗口超出浏览器,导致不能关闭的bug解决方案 2014年8月30日 3233次浏览 相信很多前端朋友都用过jqueryeasyUI,jqueryeasyUI ...

  3. mooc_java Socket

    Socket通信,TCP协议是面向连接,可靠的,有序的,以字节流的方式发送数据:基于TCP协议实现网络通信的类客户端的Socket类 服务器端的ServerSocket类 -------------- ...

  4. 我的.emacs文件,用于C/C++及shell编程。

    1. [代码]我的.emacs文件,用于C/C++及shell编程.;;我的配置;;1.基本配置;;外观配置***************;;禁用启动画面(setq inhibit-startup-m ...

  5. display:inline-bock的注意

    前端当一组元素设置为display:inline-block;时,每个元素之间的回车会被作为一个空格.

  6. codeforces 706D D. Vasiliy's Multiset(trie树)

    题目链接: D. Vasiliy's Multiset time limit per test 4 seconds memory limit per test 256 megabytes input ...

  7. 网络编程学习笔记-MAC地址和IP地址的关系

    简单地说:ip地址是服务商给你的,mac地址是你的网卡物理地址. 一.IP地址 对于IP地址,相信大家都很熟悉,即指使用TCP/IP协议指定给主机的32位地址.IP地址由用点分隔开的4个8八位组构成, ...

  8. Codeforces 762B USB vs. PS/2 贪心

    Codeforces 762B 题目大意: 有a台只有USB接口的电脑,b台PS/2接口的电脑,c台两种接口都有的电脑.每台电脑只用装一个鼠标.给出n个鼠标及其费用,每个鼠标只能使用一遍.在最大化有鼠 ...

  9. 【Lintcode】 035.Reverse Linked List

    题目: Reverse a linked list. Example For linked list 1->2->3, the reversed linked list is 3-> ...

  10. 【LeetCode】031. Next Permutation

    题目: Implement next permutation, which rearranges numbers into the lexicographically next greater per ...