求强连通/割点/桥 step1 将图深搜,形成深搜树,按遍历顺序标号->dfn[i] step2 将low[i]初始化为dfn[i] step3 回溯时low[i]=min(low[i],low[i的儿子]) 判断 DFN[]作为这个点搜索的次序编号(时间戳) LOW[]作为每个点在这颗树中的,子树 ...
分类:
编程语言 时间:
2021-03-16 11:48:55
阅读次数:
0
【Tarjan算法的作用】: 求强连通分量; 缩点(将一个环缩成一个点); 割点(这里不谈)…… 【Tarjan算法的过程】: 初始化数组:dfn[u](时间戳:该节点是第几个被首次访问到的),low[u](low[u]表示u或u的子树所能回溯到的栈中的最早的节点的dfn值) 堆栈:将u压入栈顶 更 ...
分类:
其他好文 时间:
2020-07-26 01:20:48
阅读次数:
60
一、边双连通分量 边双连通分量 边双连通图:若一个无向图中的去掉任意一条边都不会改变此图的连通性,即不存在桥,则称作边双连通图。 边双连通分量:无向图中,删除任意边后仍然能连通的块。简记为“e-DCC”。(无向连通图的极大边双连通分量) 定理:一张无向连通图是“边双连通图”,当且仅当任意一条边都包含 ...
分类:
编程语言 时间:
2020-07-26 00:43:39
阅读次数:
83
tarjan 求 e-dcc, v-dcc, scc 以及相关缩点问题 ...
分类:
编程语言 时间:
2020-07-24 22:15:08
阅读次数:
89
对于图建立dfs树,这样只存在树边和B边,不会存在横叉边,这也是tarjan算法的思想 建立dfs树后,我们发现任意一条B边都会生成一个环,且所有b边就是所有环 我们进行dfs栈的建立,找到如果存在满足条件的环,那就直接输出 如果不存在,我们证明肯定存在满足条件的独立集。因为根据鸽巢定理,每个点一定 ...
分类:
其他好文 时间:
2020-07-19 23:50:26
阅读次数:
70
算法介绍 tarjan tarjan算法要求使有向图。 Tarjan就是一个辅助作用,把有环图缩为无环图,也就是将强联通分量缩成一个点。 几个数组 dfn时间戳,low仍在栈中的最小时间戳,dag缩点后的数组,ins是否在栈中。 void tarjan(int x) { dfn[x]=low[x]= ...
分类:
编程语言 时间:
2020-07-11 12:48:47
阅读次数:
95
边双联通分量 inline void Tarjan(int x,int inedge) { dfn[x]=low[x]=++cnt; for(int i=Last[x];i;i=e[i].next) { int y=e[i].ver; if(!dfn[y]) { Tarjan(y,i); low[x ...
分类:
编程语言 时间:
2020-07-09 13:51:37
阅读次数:
81
为什么以它为例,因为这个最水,LCA唯一黄题。 首先做两道并查集的练习(估计已经忘光了)。简单来说并查集就是认爸爸找爸爸的算法。先根据线索理认爸爸,然后查询阶段如果发现他们的爸爸相同,那就是联通一家的,不同就不是一家的。 两道简单例题 P1551 亲戚 P1536 村村通 以P1551 亲戚为例 题 ...
分类:
编程语言 时间:
2020-06-24 20:14:58
阅读次数:
70
有向图 无向图 概念 时间戳 \(dfn[x]\),在深度优先遍历中,按照每个节点第一次被访问的顺序,依次做整数标记 追溯值 \(low[x]\),通过非搜索边能到达的最小时间戳 割边判定法则 无向边$(x,y)$是割边/桥,当且仅当存在x的一个子节点满足$dfn[x] < low[y]$ 删除无向 ...
分类:
编程语言 时间:
2020-06-24 15:53:36
阅读次数:
48
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<vector> ? using namespace std; ? const int SIZE = 100010; int head[ ...
分类:
编程语言 时间:
2020-06-07 21:26:37
阅读次数:
72