首页 > 其他分享 >Tarjan

Tarjan

时间:2023-06-04 22:34:59浏览次数:29  
标签:tarjan 连通 Tarjan 割点 dfn low 分量

定义

强连通分量:图中极大的任意两个结点连通的子图。

点双连通分量:对于一个无向图,假如仅仅对于该图而言其中不包含割点,那么称这个图是点双连通的。对于一个无向图中的极大点双连通的子图,我们称这个子图为点双连通分量。

边双连通分量:假如删去这条边后图不连通,那么称这条边为割边。对于一个图,假如仅仅对于该图而言其中没有割边,那么我们称这个图是边双联通的。对于一个无向图中的极大边双连通的子图,我们称这个子图为边双连通分量。

割点:对于一个连通图中的点,假如删去这个点以及与其相连的所有边之后图不连通,那么称该点为该图的割点。

写法

写法 强连通分量 点双连通分量 边双连通分量 割点
是否用栈
是否判断在栈内
是否记录从何转移
以何种性质记录转移
判定方法 dfn[s]==low[s] low[v]>=dfn[s]!from&&!child low[v]>dfn[s] s!=fa&&low[v]>=dfn[s]s==fa&&child>=2
弹栈时该点是否出栈
执行方法 遍历出点后判定,将其中的所有点出栈 遍历出点时判定,将其中所有除了自己的点出栈 遍历出点时判定割边,tarjan 完毕后全图 dfs 遍历出点时判定
是否适用于无向图
初值传参 tarjan(i) tarjan(i,0) tarjan(i,-1) tarjan(i,i)

标签:tarjan,连通,Tarjan,割点,dfn,low,分量
From: https://www.cnblogs.com/TKXZ133/p/17456542.html

相关文章

  • tarjan算法
    求强连通分量:#include<bits/stdc++.h>usingnamespacestd;intmain(){intn,m;scanf("%d%d",&n,&m);vector<vector<int>>adj(n+1);for(inti=0;i<m;i++){intu,v;scanf("%d%d",&......
  • Codeforces Round 244 (Div. 2) C. Checkposts(tarjan)
    题目链接思路考虑到如果一些点两两都能互相到达,那么这些点中,只要有一个点是安全的,就可以顾及到其他所有点,而这些点就是强连通分量(SCC)。思路很简单,就是每一个强连通分量中的最小值相加得到第一问的解,而第二问就是求每一个强连通分量有几个最小值,相乘得到答案。代码#include<i......
  • 最近公共祖先 Tarjan算法
    例题:洛谷P3379【模板】最近公共祖先(LCA)https://www.luogu.com.cn/problem/P3379tarjan算法是利用了并查集来求LCA的,时间复杂度比倍增低,是O(n+m)#include<iostream>#include<vector>#include<utility>#defineforup(i,l,r)for(inti=l;i<=r;i++)#definefordown(i,l,r)fo......
  • 「学习笔记」tarjan求最近公共祖先
    Tarjan算法是一种离线算法,需要使用并查集记录某个结点的祖先结点。并没有传说中的那么快。过程将询问都记录下来,将它们建成正向边和反向边。在dfs的过程中,给走过的节点打上标记,同时维护并查集,这里利用了回溯的思想,如果\(u\)节点的这棵子树没搜完,那么fa[u]=u;,搜完后......
  • 「学习笔记」tarjan 算法与强连通分量
    强连通的定义是:有向图G强连通是指,G中任意两个结点连通。强连通分量(StronglyConnectedComponents,SCC)的定义是:极大的强连通子图。说简单一点就是环,环内的点都在一个强连通分量里,单独一个点也算是强连通分量(自己可以到达自己)。变量inttim,sc;intdfn[N],low[N],scc[N];......
  • [tarjan强连通分量算法] 目的,图解,思路,伪代码,实例
    强连通分量算法(Tarjan'sStronglyConnectedComponentAlgorithm)利用深度优先算法找到一个非强连通的有向图中的所有强连通子图。无向图可以被认为是同时具备u->v和v->u的图。一些概念强连通:在有向图中,任意点u与v之间存在有来回两个方向的通路,类似存在一个环;强连通图:图......
  • LeetCode 周赛 341 场,模拟 / 树上差分 / Tarjan 离线 LCA / DFS
    本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]提问。大家好,我是小彭。上周末有单双周赛,双周赛我们讲过了,单周赛那天早上有事没参加,后面做了虚拟竞赛,然后整个人就不好了。前3题非常简单,但第4题有点东西啊,差点就放弃了。最后,被折磨了一个下午和一个大夜......
  • 强连通分量,tarjan
    强连通:有向图两个点互相可以到达,则称为强连通,强连通分量指将图分成多个子图,每个子图的点都能相互到达,子图就称为强连通分量;constintN=1e5+5;vector<int>e[N];intdfn[N]//dfs顺序,low[N]//往前跳能到达的最小数,dex,bel[N]//表示每一个点在哪一个强连通分量中,cn......
  • Tarjan 算法学习笔记
    (绝大部分都是贺的,来自OI-WIKI和洛谷题解,自己抄一遍印象深刻一点,部分代码未编译,不保证正确性,但大体是对的)一、DFS生成树注意可能有多棵,因为图可能不联通。树边(treeedge):示意图中以黑色边表示,每次搜索找到一个还没有访问过的结点的时候就形成了一条树边。反祖边(backedge):......
  • tarjan缩点(受欢迎的牛)
    #include<iostream>#include<cstdio>#include<cmath>#include<algorithm>#include<cstring>usingnamespacestd;intcnt;//计数intnum;//时间戳intp;//栈的......