//白书 321页
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<stack>
using namespace std;
const int maxn=5003;
vector<int>g[maxn];//g保存原始图
int pre[maxn],lowlink[maxn],sccno[maxn],dfs_clock,scc_cnt;
//pre[u]为节点u的搜索次序编号;lowlink[u]为u或u的子树能够追溯到的最早的栈中结点的编号
//sccno[i]为i所在的scc的编号;scc_cnt为scc计数器
stack<int>s;//保存当前scc中的节点
void dfs(int u)
{pre[u]=lowlink[u]=++dfs_clock;//设置节点u次序编号lowlink初值
    s.push(u);for(int i=0;i<g[u].size();i++){int v=g[u][i];if(!pre[v]){     //如果v没有被访问过dfs(v);      //继续向下找lowlink[u]=min(lowlink[u],lowlink[v]);}else if(!sccno[v])//如果节点v还在栈内lowlink[u]=min(lowlink[u],pre[v]);}if(lowlink[u]==pre[u]){  //如果节点u是强连通分量的根scc_cnt++;for(;;){int x=s.top();//x退栈为该强连通分量中的一个点
            s.pop();sccno[x]=scc_cnt;if(x==u) break;}}
}
void find_scc(int n)
{dfs_clock=scc_cnt=0;memset(pre,0,sizeof(pre));memset(sccno,0,sizeof(sccno));for(int i=0;i<n;i++)if(!pre[i]) dfs(i);
}
int main()
{return 0;
}

转载于:https://www.cnblogs.com/--ZHIYUAN/p/6297326.html

有向图的强联通分量 Tarjan算法模板相关推荐

  1. POJ 2186 popular cow 有向图的强联通问题 Tarjan算法

    参考:http://hi.baidu.com/1093782566/blog/item/e5a0e9229913bd048b82a175.html http://www.cppblog.com/Iro ...

  2. [vios1023]维多利亚的舞会3强联通分量tarjan

    题目链接:https://vijos.org/p/1023 最近在练强联通分量,当然学的是tarjan算法 而这一道题虽然打着难度为3,且是tarjan算法的裸题出没在vijos里面 但其实并不是纯粹 ...

  3. 强联通块tarjan算法

    http://poj.org/problem?id=1236 第一问:需要几个学校存在软件,才能通过传递,使得所有的学校都有软件 用tarjan算法求出强联通分量后,将每个联通分量缩成一个点,那么问题 ...

  4. 有向图的强联通分量之:【求最长链】【求最长链的方案数(图论中的方案数DP)】【最长链和最大半联通子图 节点数相同】【最长链与最大半联通子图等价又不完全等价】

    注意了: 最长链与最大半联通子图是等价又不完全等价的. 最大半联通子图的节点数 会 与最长链的节点数相同, 但是边数的话,最大半联通子图还是会加进 两个点之间的所有边 但是本题的主要目的是求 最长链上 ...

  5. Tarjan的强联通分量

    求强联通分量有很多种. <C++信息学奥赛一本通>  中讲过一个dfs求强联通分量的算法Kosdaraju,为了骗字数我就待会简单的说说.然而我们这篇文章的主体是Tarjan,所以我肯定说 ...

  6. P3387-【模板】缩点【tarjan,强联通分量,DAGdp】

    正题 评测记录: https://www.luogu.org/recordnew/lists?uid=52918&pid=P3387 大意 一个有向图.每个点有权值,但每个值只能取一次,每条边 ...

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

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

  8. BZOJ 2140 稳定婚姻(强联通分量判环)【BZOJ修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2140 是 hydro 的 BZOJ ...

  9. 关于强联通分量 的求法讨论

    这个讨论主要是关于 HA2006年最受欢迎的牛 的讨论 . 尽管这道题对于很多dalao来说都觉得是模板题,但是仍是值得思考的,因为我第一次写这道题的时候, 缩完点之后建图建错玄学跑dfs n^2做法 ...

  10. 强联通分量与双连通分量

    强联通分量 1.概念 在有向图G中,如果两点互相可达,则称这两个点强连通,如果G中任意两点互相可达,则称G是强连通图. 定理: 1.一个有向图是强连通的,当且仅当G中有一个回路,它至少包含每个节点一次 ...

最新文章

  1. 【第一道计算几何题】 UVA11178 Morley‘s Theorem (二维几何,旋转直线求求交点)
  2. 负数对2取余_不同语言的负数取余问题
  3. 长度限制的队列Python
  4. 基于数据挖掘的旅游推荐APP(四):“我的”模块
  5. word java api,是否有可以创建丰富Word文档的Java API?
  6. visio2013复制到word有多余白边_学习工坊(一)|实用技巧之Word篇
  7. mysql 从 a表updateb表_mysql A表自动更新和插入B表的数据
  8. Laravel用post提交表单常见的两个错误
  9. Python案例:汉诺塔游戏
  10. Math类的三个方法比较: floor() ceil() round()
  11. 关于Android学习要问的一些问题
  12. go学习笔记-包处理
  13. java usb camera_Android usb camera设备添加
  14. LINUX 下查看设备状态的常用命令
  15. YouTube批量下载开源代码汇总
  16. css 小尖角,CSS3之尖角标签
  17. 初创期企业运营必备手册-工具包-绩效考核方法工具包
  18. CISSP-OSG-各章节书面实验整理
  19. Android NDK 编译 三方库记录 及 jni库封装问题
  20. Android 打造炫目的圆形菜单 秒秒钟高仿建行圆形菜单

热门文章

  1. vue.js 常用语法总结(一)
  2. flex弹性盒子布局
  3. 关于 Maven 的插件maven-war-plugin
  4. Guava 相关文章
  5. 【万里征程——Windows App开发】使用华丽丽的字体
  6. foreman架构的引入4-安装Foreman1.6.3架构(foreman与puppetmaster分离)
  7. java静态代码审查工具
  8. javascript:document.all document.getElementsByName
  9. Mac OS X 安装protobuf
  10. json html双引号,当gethtml方法返回json时,json中的字符串如果存在双引号,会破坏json的格式, 如:quot;...