tarjan强连通算法
2024-08-20 22:25:20
#include <iostream>
#include <string.h>
using namespace std;
const int MAX_N=;
const int MAX_M=;
struct edge{
int v,next;
int len;
}E[MAX_M];
int p[MAX_N],eid;
void init(){
memset(p,-,sizeof(p));
eid=;
}
void insert(int u,int v){
E[eid].v=v;
E[eid].next=p[u];
p[u]=eid++;
} void tarjan(int u){
dfn[u]=low[u]=++idx;
s[top++]=u;
in_stack[u]=true;
for(int i=p[u];i+;i=E[i].next){
int v=E[i].v;
if(!dfn[v]){
tarjan(v);
low[u]=min(low[u],low[v]);
}else if(in_stack[v]){
low[u]=min(low[u],dfn[v]);
}
}
if(dfn[u]==low[u]){
++scc;
do{
belong[s[--top]]=scc;
in_stack[s[top]]=false;
}while(s[top]!=u);
}
}
int main() {
int n,m;
init();
cin>>n>>m;
for(int i=;i<m;i++){
int u,v;
cin>>u>>v;
insert(u,v);
}
memset(dfn,,sizeof(dfn));
idx=;
for(int i=;i<=n;++i){
if(!dfn[i]){
tarjan(i);
}
}
for(int i=;i<=scc;i++){
cout<<"block "<<i<<": ";
for(int j=;j<=n;j++){
if(belong[j]==i){
cout<<j<<" ";
}
}
cout<<endl;
}
return ;
}
最新文章
- 文件上传命令rz和下载命令sz的安装
- Careercup - Facebook面试题 - 5177378863054848
- Axiom3D学习日记 1.程序配置
- Warning: World-writable config file &#39;/etc/my.cnf&#39; is ignored
- JavaScript 中的事件类型1(读书笔记思维导图)
- 编写JQuery插件-3
- python 解析docx文档的方法,以及利用Python从docx文档提取插入的文本对象和图片
- redis恢复(aof)
- tidb在DDL语句方面的测试
- Java三种代理模式:静态代理、动态代理和cglib代理
- 【scrapy】其他问题
- PHP中类和对象的相关函数
- PHPCMS V9开发文档
- ubuntu16.04下安装kdevelop和汉化
- (转)MySQL自带的性能压力测试工具mysqlslap详解
- PEB及LDR链
- 关于IdByName 为什么一个消息主题要有 Id和 Name的解释
- 《C# to IL》第二章 IL基础
- apache的应用(发布目录,黑白名单,虚拟主机,PHP-cgi支持,正向代理,https加密,)
- 【状压DP】BZOJ2734-[HNOI2012]集合选数
热门文章
- BZOJ5093图的价值(斯特林数)
- centos7/rhel7下安装redis4.0集群
- php记录
- 被addPropertyChangeListener(";...";,this)差点搞崩溃
- 第二十二篇-Guideline基准线
- 第二篇:用Android Studio编写Hello World
- SNP在世界地图上的频率分布
- 认识EasyUI——DataGrid的onClickRow事件
- POJ 1815 Friendship (Dinic)
- text-overflow文本溢出隐藏“...”显示