做了一些树形DP实在不想做了看到von在玩tarjan算法,好像放假之前看过关于rmq 以及tarjan算法的说明只是没具体弄明白。今天看了一下von分享的资料不错。找了一个模板题就当tarjan算法的模板吧

http://acm.hdu.edu.cn/showproblem.php?pid=1269

判断是否为强连通图 bcnt == 1只有一个强连通分量且为自己 bcnt >1 存在多个强连通分量

View Code

#include <cstdio>#include <iostream>#include <cstring>#include <vector>#define maxn 10007using namespace std;vector<int>g[maxn];int DFN[maxn],LOW[maxn],Belong[maxn],stack[maxn];bool instack[maxn];int n,m;int bcnt,top,index;void tarjan(int i){int j;    DFN[i] = LOW[i] = ++index;    stack[++top] = i;    instack[i] = true;int size = g[i].size();for (int k = 0; k < size; ++k)    {        j = g[i][k];if(!DFN[j])        {            tarjan(j);if(LOW[j] < LOW[i])            LOW[i] = LOW[j];        }else if(instack[j] && DFN[j] < LOW[i])        {            LOW[i] = DFN[j];        }    }if(DFN[i] == LOW[i])    {        bcnt ++;do        {             j = stack[top--];             instack[j] = false;             Belong[j] = bcnt;        }while(j != i);    }}void solve(){int i;    bcnt = top = index = 0;for (i = 1; i <= n; ++i)    {if(!DFN[i])        tarjan(i);    }if(bcnt == 1)    printf("Yes\n");else    printf("No\n");}int main(){int i,x,y;while(cin>>n>>m)    {if(!n && !m) break;for (i = 0; i <= n; ++i)        {            DFN[i] = LOW[i] = Belong[i] = 0;            instack[i] = false;            g[i].clear();        }for (i = 0; i < m; ++i)        {            cin>>x>>y;            g[x].push_back(y);        }        solve();/*for (i = 1; i <= n; ++i)        {            printf("%d ",Belong[i]);        }        printf("\n");*/    }return 0;}

tarjan 算法模板相关推荐

  1. CSP认证201509-4 高速公路[C++题解]:强连通分量、tarjan算法模板题

    题目分析 来源:acwing 分析: 所求即为强连通分量的个数,然后计算每个强连通分量中点的个数,相加即可. 所谓强连通分量,它是一个子图,其中任意两点可以相互到达,并且再加一个点,就不能满足任意两点 ...

  2. 【HDU - 1269】迷宫城堡 (tarjan算法模板)

    题干: 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A房间和B房间,只 ...

  3. poj1236 Tarjan算法模板 详解

    思想: 做一遍DFS,用dfn[i]表示编号为i的节点在DFS过程中的访问序号(也可以叫做开始时间)用low[i]表示i节点DFS过程中i的下方节点所能到达的开始时间最早的节点的开始时间.初始时dfn ...

  4. Tarjan算法_LCA

    参考资料:Tarjan算法_LCA  tarjan算法求LCA  Tarjan 算法&模板 只是对其中的代码进行一下注释,如有错误还得回来再改. //不怕别人比你聪明,就怕别人比你聪明还比你努 ...

  5. 洛谷 P3388 【模板】割点(割顶) 根+非根+dfn[]+low[]+不一样的Tarjan算法

    洛谷  P3388 [模板]割点(割顶)  根+非根+dfn[]+low[]+不一样的Tarjan算法 Tarjan算法,详见https://blog.csdn.net/mrcrack/article ...

  6. Tarjan算法 —— 强连通双连通缩点 模板

    TP 强连通缩点模板 双连通缩点模板 边双连通 点双连通 有向图 我们知道在一张 有向无环 图(也叫 DAG)中,肯定存在拓扑序.拓扑序的特殊顺序性质,能够允许我们在 O(n+m)O(n + m)O( ...

  7. tarjan算法 割点割边强联通 算法讲解模板 自用整理

    很早就学过tarjan算法(割点割边与强联通)了,但是因为久不用老是忘,也有收藏过几篇不错的博客,但是每次需要时都要翻出那几篇太麻烦了,所以自己开篇记录方便自己的复习.图片和部分文字来源自其他博客,文 ...

  8. Tarjan 算法思想求强连通分量及求割点模板(超详细图解)

    割点定义 在一个无向图中,如果有一个顶点,删除这个顶点及其相关联的边后,图的连通分量增多,就称该点是割点,该点构成的集合就是割点集合.简单来说就是去掉该点后其所在的连通图不再连通,则该点称为割点. 若 ...

  9. 洛谷P3387 【模板】缩点 (tarjan算法)

    输入: 2 2 1 1 1 2 2 1 输出: 2 解题思路:首先来说一下这个题为什么要缩点.题目中说会给定一个有向图,所以是 有可能会形成环的,又因为题目要我们求出路径上经过点的权值和最大,如果有环 ...

  10. tarjan算法不是很懂先mark一下。

     前面为转载的.后面是自己的理解. 三种tarjan算法(上) .这篇算是做一个总结吧. 求强连通分量 求无向图的割和桥 最近公共祖先 求强连通分量 基本概念:       强连通是有向图才有的概念. ...

最新文章

  1. 我什么都没做,文章就自动变成了视频?AI神器解放视频编辑丨百度研究院出品...
  2. 【Android 高性能音频】AAudio 音频流 PCM 采样 的 采样 缓冲 播放 的 连续机制 ( 数据回调机制 | 数据回调函数指针 | 实现数据回调函数 | 设置数据回调函数 )
  3. 解析XML的4种方式及优缺点比较
  4. java实现dvd租赁系统_Java编写汽车租赁系统
  5. ubuntu20.04安装deepin qq
  6. 排队论游乐场的游乐项目_外汇游乐场
  7. 阿里P7亲自教你!我的头条面试经历分享,完整PDF
  8. POJ 3258 River Hopscotch
  9. 目标检测第7步:如何在Windows 10下,配置Pycharm中的YOLOv5(5.0)虚拟环境?
  10. Java从零开始学十四(包和访问控制)
  11. Linux内核分析 - 网络[四补]:路由表补充
  12. iptables 从入门到应用
  13. 实验一:marlab安装调试
  14. 104规约(持续更新....)
  15. 【微信公众号后台基础能力接口对接】
  16. socket 读、写字节流数据
  17. android 360锁屏清除,“打盹”省电 360清理大师锁屏清理早已实现
  18. vue的h函数_vue 中的h函数
  19. MT2523用户手册,MT2523设计指南资料
  20. print 设置纸张的高度_祝贺! 2020珠峰高程测量登山队成功登顶!用Python计算一张纸对折多少次会超过珠峰高度?...

热门文章

  1. Ubuntu 20.04 安装 php 并配置 OpenResty
  2. NOIP引水入城(dfs)
  3. 境外自助游服务平台澳乐网获戈壁千万级投资
  4. 灵活的javaScript
  5. ReactiveCocoa MVVM 学习总结二
  6. java中接口与抽象类的区别
  7. ABAP SMARTFORMS 套打
  8. 用变量a给出下面的定义
  9. [转]写一个块设备驱动(第七章)
  10. Pr 2021快速入门教程,如何新建项目及首选项的基础设置?