tarjan大板子(非讲解):

1、普通缩点DGA

void tarjan(int x){
dfn[x]=low[x]=++cntp;
q.push(x);v[x]=1;
for(int i=head[x];i;i=bi[i].next){
int j=bi[i].to;
if(!dfn[j]){
tarjan(j);
low[x]=min(low[x],low[j]);
}
else if(v[j])low[x]=min(low[x],dfn[j]);
}
if(low[x]==dfn[x]){
int p;
num++;//缩点的个数
do{
p=q.top();
q.pop();
zh[p]=num;//zh[i]表示 i对应的缩点之后的点
cntt[num]++;//cntt[i]表示缩点之后i点代表的点的个数
v[p]=0;
}while(x!=p);
}
}
//重建边 很多题需要缩点重建边成一个DGA以后在进行操作
for(int i=1;i<=cnt;i++){
if(zh[bi[i].fr]!=zh[bi[i].to])ad(zh[bi[i].fr],zh[bi[i].to]);
}

2、求割点

void tarjan(int x,int root){
dfn[x]=low[x]=++cntp;
int fl=0;
for(int i=head[x];i;i=bi[i].next){
int j=bi[i].to;
if(!dfn[j]){
tarjan(j);
low[x]=min(low[x],low[j]);
if(low[j]>=dfn[x]){
fl++;
if(x!=root||fl>1)ge[x]=1;
}
}
else low[x]=min(low[x],dfn[j]);
}
}

3、求割边

void tarjan(int x,int id){
dfn[x]=low[x]=++cntp;
for(int i=head[x];i!=-1;i=bi[i].next){
int j=bi[i].to;
if(!dfn[j]){
tarjan(j,i);
low[x]=min(low[x],low[j]);
if(low[j]>dfn[x])bb[i]=bb[i^1]=1;//注意边要从0或2开始存
}
else if(i!=(id^1))low[x]=min(low[x],dfn[j]);
}
}

4、求边双连通分量

void tarjan(int x,int id){
dfn[x]=low[x]=++cntp;
q.push(x);
for(int i=head[x];i!=-1;i=bi[i].next){
// cout<<i<<' '<<id<<endl;
if(i==(id^1))continue;
int j=bi[i].to;
if(!dfn[j]){
tarjan(j,i);
low[x]=min(low[x],low[j]);
}
else low[x]=min(low[x],dfn[j]);
}
if(dfn[x]==low[x]){和父亲的边是割边,和栈里在他上面的点在一个边双连通分量里面。
num++;
int p;
do{
p=q.top();
q.pop();
zh[p]=num;
}while(p!=x);
}
}

5、点双连通分量

void tarjan(int x){
dfn[x]=low[x]=++cntp;
int fl=0;
for(int i=head[x];i;i=bi[i].next){
int j=bi[i].to;
if(!dfn[j]){
q.push(j);
tarjan(j);
low[x]=min(low[x],low[j]);
if(low[j]>=dfn[x]){
num++;
int p;
do{
p=q.top();
q.pop();
mann[num].ps(p);
}while(p!=j);
mann[num].ps(x);
}
}
else low[x]=min(low[x],dfn[j]);
}
}

END

tarjan 各类板子集合的更多相关文章

  1. C#中遍历各类数据集合的方法总结

    C#中遍历各类数据集合的方法总结: 1.枚举类型 //遍历枚举类型Sample的各个枚举名称 foreach (string sp in Enum.GetNames(typeof(Sample))) ...

  2. 【.NET】C#中遍历各类数据集合的方法

    [.NET]C#中遍历各类数据集合的方法   C#中遍历各类数据集合的方法,这里自己做下总结: 1.枚举类型             //遍历枚举类型Sample的各个枚举名称             ...

  3. c++算法竞赛常用板子集合(持续更新)

    前言 本文主要包含算法竞赛一些常用的板子,码风可能不是太好,还请见谅. 后续会继续补充没有的板子.当然我太菜了有些可能写不出来T^T 稍微有些分类但不多,原谅我QwQ 建议 Ctrl + F 以快速查 ...

  4. Tarjan算法——强连通、双连通、割点、桥

    Tarjan算法 概念区分 有向图 强连通:在有向图\(G\)中,如果两个顶点\(u, v\ (u \neq v)\)间有一条从\(u\)到\(v\)的有向路径,同时还有一条从\(v\)到\(u\)的 ...

  5. codeforce 427 C. Checkposts(tarjan 强连通分量)

    题目链接:http://codeforces.com/contest/427/problem/C 题目大意是有n个junctions,这些junctions之间有m条道路,两两相连,现在在juncti ...

  6. BZOJ 1969 树链剖分+Tarjan缩点

    发现自己Tarjan的板子有错误.发现可以用Map直接删去边,Get. 听说std是双连通.LCA.并查集.离线思想.用BIT维护dfs序和并查集维护LCA的动态缩点的好题 #include < ...

  7. 【bzoj2427】[HAOI2010]软件安装 Tarjan+树形背包dp

    题目描述 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和最大).但是现 ...

  8. PY 个板子计划【雾

    各类板子计划 A+B √ 放个鬼的链接[雾 欧拉筛 √ https://www.cnblogs.com/Judge/p/11690114.html 树状数组 √ 惨痛的教训,以后咱打数据结构的时候绝对 ...

  9. P5676 [GZOI2017]小z玩游戏【Tarjan】

    小z玩游戏 Tarjan算是板子题吧,但是要稍微做一些修改,建边需要多考虑,建立"虚点". 题目描述 小 z 很无聊. 小 z 要玩游戏. 小 z 有\(N\)个新游戏,第\(i\ ...

  10. 2014-9-9 NOIP模拟赛

    东方幻想乡系列模拟赛Stage 1命题 Nettle审题 Barty ccy1991911 FlanS39 Wagner T2 高精除高精,从来没写过,不知道怎么写,我就用大数减小数ans次,果断超时 ...

随机推荐

  1. 【Vue】Re05 操作数组的API

    一.响应式处理的操作: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  2. 从markdown引擎实现的角度看markerdown到底是什么?

    引用百度百科的解释: 链接:https://baike.baidu.com/item/markdown/3245829 Markdown 是一种轻量级标记语言,创始人为约翰·格鲁伯(John Grub ...

  3. 使用X11进行屏幕转播是否有价值? 最好用的远控软件是什么?

    由于有多个主机在使用,而且物理位置不在一起,所以以前往往要使用VNC软件来进行远程连接,但是其延迟比较高,使用感受不是很好,而且由于我所使用的多个主机均是Ubuntu系统,于是想到了是否可以使用X11 ...

  4. 作为电脑屏幕的补光灯,到底是应该选Led灯还是荧光灯

    现在的台灯灯具市场基本被Led灯给霸占,这就无形之中要大家买台灯的时候只能选择Led等,我也是如此,手上有一款20年前上高中时候的"孩视宝"荧光灯的台灯,然后还有一款刚刚购入的Le ...

  5. git submodule子模块操作

    背景 为什么使用子模块,因为需要使用其他人维护的公共组件,但这些组件并不是以包或库的形式使用的.所以采用子模块的形式,无论是自己修改还是拉取也很方便. 子模块操作 增加子模块 git submodul ...

  6. 构建无服务器数仓(三 )EMR Serverless 操作要点、优化以及开放集成测试

    引言 在数据驱动的世界中,企业正在寻求可靠且高性能的解决方案来管理其不断增长的数据需求.本系列博客从一个重视数据安全和合规性的 B2C 金融科技客户的角度来讨论云上云下混合部署的情况下如何利用亚马逊云 ...

  7. condition字符串匹配问题

    概述 freeswitch是一款简单好用的VOIP开源软交换平台. fs使用dialplan配置文件执行业务流程,condition条件变量的配置是必然会使用的,这里记录一次配置过程中的错误示范. 环 ...

  8. SMU Autumn 2023 Round 1(Div.1)

    SMU Autumn 2023 Round 1(Div.1) A. Set or Decrease(枚举) 题意就是你可以进行两种操作,将\(a_i-1\)或者令\(a_i\)等于\(a_j\),然后 ...

  9. 直播机--蓝松绿幕抠图SDK功能表

  10. C# WebSocket Fleck 源码解读

    最近在维护公司旧项目,偶然发现使用Fleck实现的WebSocket主动推送功能,(由于前端页面关闭时WebSocket Server中执行了多次OnClone事件回调并且打印了大量的关闭日志,),后 ...