强连通分量(SCC)模版
2016-07-16 11:15
246 查看
如题,模版如下:
//scc_cnt为SCC计数器,sccno[i]为i所在的SCC编号 //scc_cnt为SCC个数,scc的 编号从1开始 vector<int> G[maxn]; //图存在G[maxn]中,若有一条从v->u的边,则存储时先v--,u--,再G[v].push_back(u),即结点从0开始编号 int pre[maxn],lowlink[maxn],sccno[maxn],dfs_clock,scc_cnt; stack<int> S; void dfs(int u) { pre[u]=lowlink[u]=++dfs_clock; S.push(u); for(int i=0;i<G[u].size();i++) { int v=G[u][i]; if(!pre[v]) { dfs(v); lowlink[u]=min(lowlink[u],lowlink[v]); } else if(!sccno[v]) lowlink[u]=min(lowlink[u],pre[v]); } if(lowlink[u]==pre[u]) { scc_cnt++; while(1) { int x=S.top(); S.pop(); sccno[x]=scc_cnt; if(x==u) break; } } } void find_scc(int n) { dfs_clock=scc_cnt=0; memset(sccno,0,sizeof(sccno)); memset(pre,0,sizeof(pre)); for(int i=0;i<n;i++) if(!pre[i]) dfs(i); }
相关文章推荐
- APUE读书笔记-第五章 标准I/O库
- [hdu 1711] Number Sequence [kmp]
- 将图像扭正确。利用OpenCV检测图像中的长方形画布或纸张并提取图像内容
- LWIP内存池memp.h头文件学习
- hello world 是我们的第一个脚印!
- codeforces 696C C. PLEASE(概率+快速幂)
- 实例解析如何正确使用Java数组
- bzoj 1592 [Usaco2008 Feb]Making the Grade 路面修整
- 【千里码】Task6-IP
- Search in Rotated Sorted Array
- 计算表达式
- kafka简介
- request对象
- Web.py - streaming_large_files
- Android实现数据存储技术
- android检查网络连接
- 高级语言与低级语言的区别
- CISCO配置文件的导出和导入(Timed out)问题 踩坑记录
- 173. Binary Search Tree Iterator
- Linux文件操作例子