有向图的强联通分量 Tarjan算法模板
//白书 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算法模板相关推荐
- POJ 2186 popular cow 有向图的强联通问题 Tarjan算法
参考:http://hi.baidu.com/1093782566/blog/item/e5a0e9229913bd048b82a175.html http://www.cppblog.com/Iro ...
- [vios1023]维多利亚的舞会3强联通分量tarjan
题目链接:https://vijos.org/p/1023 最近在练强联通分量,当然学的是tarjan算法 而这一道题虽然打着难度为3,且是tarjan算法的裸题出没在vijos里面 但其实并不是纯粹 ...
- 强联通块tarjan算法
http://poj.org/problem?id=1236 第一问:需要几个学校存在软件,才能通过传递,使得所有的学校都有软件 用tarjan算法求出强联通分量后,将每个联通分量缩成一个点,那么问题 ...
- 有向图的强联通分量之:【求最长链】【求最长链的方案数(图论中的方案数DP)】【最长链和最大半联通子图 节点数相同】【最长链与最大半联通子图等价又不完全等价】
注意了: 最长链与最大半联通子图是等价又不完全等价的. 最大半联通子图的节点数 会 与最长链的节点数相同, 但是边数的话,最大半联通子图还是会加进 两个点之间的所有边 但是本题的主要目的是求 最长链上 ...
- Tarjan的强联通分量
求强联通分量有很多种. <C++信息学奥赛一本通> 中讲过一个dfs求强联通分量的算法Kosdaraju,为了骗字数我就待会简单的说说.然而我们这篇文章的主体是Tarjan,所以我肯定说 ...
- P3387-【模板】缩点【tarjan,强联通分量,DAGdp】
正题 评测记录: https://www.luogu.org/recordnew/lists?uid=52918&pid=P3387 大意 一个有向图.每个点有权值,但每个值只能取一次,每条边 ...
- CSP认证201509-4 高速公路[C++题解]:强连通分量、tarjan算法模板题
题目分析 来源:acwing 分析: 所求即为强连通分量的个数,然后计算每个强连通分量中点的个数,相加即可. 所谓强连通分量,它是一个子图,其中任意两点可以相互到达,并且再加一个点,就不能满足任意两点 ...
- BZOJ 2140 稳定婚姻(强联通分量判环)【BZOJ修复工程】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2140 是 hydro 的 BZOJ ...
- 关于强联通分量 的求法讨论
这个讨论主要是关于 HA2006年最受欢迎的牛 的讨论 . 尽管这道题对于很多dalao来说都觉得是模板题,但是仍是值得思考的,因为我第一次写这道题的时候, 缩完点之后建图建错玄学跑dfs n^2做法 ...
- 强联通分量与双连通分量
强联通分量 1.概念 在有向图G中,如果两点互相可达,则称这两个点强连通,如果G中任意两点互相可达,则称G是强连通图. 定理: 1.一个有向图是强连通的,当且仅当G中有一个回路,它至少包含每个节点一次 ...
最新文章
- 【第一道计算几何题】 UVA11178 Morley‘s Theorem (二维几何,旋转直线求求交点)
- 负数对2取余_不同语言的负数取余问题
- 长度限制的队列Python
- 基于数据挖掘的旅游推荐APP(四):“我的”模块
- word java api,是否有可以创建丰富Word文档的Java API?
- visio2013复制到word有多余白边_学习工坊(一)|实用技巧之Word篇
- mysql 从 a表updateb表_mysql A表自动更新和插入B表的数据
- Laravel用post提交表单常见的两个错误
- Python案例:汉诺塔游戏
- Math类的三个方法比较: floor() ceil() round()
- 关于Android学习要问的一些问题
- go学习笔记-包处理
- java usb camera_Android usb camera设备添加
- LINUX 下查看设备状态的常用命令
- YouTube批量下载开源代码汇总
- css 小尖角,CSS3之尖角标签
- 初创期企业运营必备手册-工具包-绩效考核方法工具包
- CISSP-OSG-各章节书面实验整理
- Android NDK 编译 三方库记录 及 jni库封装问题
- Android 打造炫目的圆形菜单 秒秒钟高仿建行圆形菜单
热门文章
- vue.js 常用语法总结(一)
- flex弹性盒子布局
- 关于 Maven 的插件maven-war-plugin
- Guava 相关文章
- 【万里征程——Windows App开发】使用华丽丽的字体
- foreman架构的引入4-安装Foreman1.6.3架构(foreman与puppetmaster分离)
- java静态代码审查工具
- javascript:document.all document.getElementsByName
- Mac OS X 安装protobuf
- json html双引号,当gethtml方法返回json时,json中的字符串如果存在双引号,会破坏json的格式, 如:quot;...