KS求有向图强连通分量模板
#include<bits/stdc++.h>
using namespace std;
typedef long long ll; int n,m;
const int maxn=1e5+;
const int maxm=*maxn;
struct nodeg
{
int to;
int nxt;
}eg[maxm];
int headg[maxn];
int headgr[maxn];
struct nodegr
{
int to;
int nxt;
}egr[maxn];
int totg;
int totgr;
int id=;
int num[maxn];
bool vis[maxn];
int root;
int cnt;
void init()
{
memset(headg,-,sizeof(headg));
memset(headgr,-,sizeof(headgr));
totg=;
totgr=;
cnt=;
}
void addg(int u,int v)
{
eg[totg].to=v;
eg[totg].nxt=headg[u];
headg[u]=totg++;
}
void addgr(int u,int v)
{
egr[totgr].to=v;
egr[totgr].nxt=headgr[u];
headgr[u]=totgr++;
}
vector<int> scc[maxn];
void DFS(int u)
{
vis[u]=true;
for(int i=headg[u];i!=-;i=eg[i].nxt)
{
int v=eg[i].to;
if(!vis[v])
{
DFS(v);
}
}
num[++id]=u;
}
void RDFS(int u,int k)
{
vis[u]=true;
scc[k].push_back(u);
for(int i=headgr[u];i!=-;i=egr[i].nxt)
{
int v=egr[i].to;
if(!vis[v])
{
RDFS(v,k);
}
}
}
void SCC()
{
memset(vis,false,sizeof(vis));
for(int i=;i<=n;i++)
{
if(!vis[i])
{
DFS(i);
}
}
memset(vis,false,sizeof(vis));
for(int i=;i<=n;i++)
{
scc[i].clear();
}
cnt=;
for(int i=id;i>=;i--)
{
if(!vis[num[i]]) RDFS(num[i],++cnt);
}
}
void printSC()
{
for(int i=;i<=cnt;i++)
{
int sz=scc[i].size();
for(int j=;j<sz;j++)
printf("%d ",scc[i][j]);
puts("");
}
} int main()
{
while(~scanf("%d%d",&n,&m))
{
init();
int u,v;
for(int i=;i<=m;i++)
{
scanf("%d%d",&u,&v);
addg(u,v);
addgr(v,u);
}
SCC();
printSC();
} return ;
}
Kosaraju-Sharir算法
http://www.cnblogs.com/llhthinker/p/4954082.html
KS求有向图强连通分量模板的更多相关文章
- Tarjan算法求有向图强连通分量并缩点
// Tarjan算法求有向图强连通分量并缩点 #include<iostream> #include<cstdio> #include<cstring> #inc ...
- Tarjan求有向图强连通分量 BY:优少
Tarjan算法:一种由Robert Tarjan提出的求解有向图强连通分量的线性时间的算法. 定义给出之后,让我们进入算法的学习... [情境引入] [HAOI2006受欢迎的牛] 题目描述: 每头 ...
- POJ3180(有向图强连通分量结点数>=2的个数)
The Cow Prom Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 1451 Accepted: 922 Descr ...
- 有向图强连通分量的Tarjan算法及模板
[有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强联通(strongly connected),如果有向图G的每两个顶点都强联通,称有向图G是一个强联通图.非强联通图有向 ...
- tarjan求强连通分量模板
什么是强连通分量? 百度百科 有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(stro ...
- 有向图强连通分量的Tarjan算法
有向图强连通分量的Tarjan算法 [有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G ...
- 有向图强连通分量 Tarjan算法
[有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected).如果有向图G的每两个顶点都强连通,称G是一个强连通图.非强连通图有向图的极 ...
- 【转】有向图强连通分量的Tarjan算法
原文地址:https://www.byvoid.com/blog/scc-tarjan/ [有向图强连通分量] 在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly con ...
- 图的连通性:有向图强连通分量-Tarjan算法
参考资料:http://blog.csdn.net/lezg_bkbj/article/details/11538359 上面的资料,把强连通讲的很好很清楚,值得学习. 在一个有向图G中,若两顶点间至 ...
随机推荐
- bat 符号说明
netstat -an|findstr 139 ipconfig/all findstr IP ipconfig/all |findstr 物理地址 定值选行 ipconf ...
- sqlserver数据库备份方法
须事先准备一个工具curl,把它放在c盘.然后,在数据库所在服务器安装7z.最后把这2个存储过程执行,在sqlserver的代理中新建作业,即可实现备份操作. --备份指定数据库到本地和远程指定位置( ...
- 状态压缩---区间dp第一题
标签: ACM 题目 Gappu has a very busy weekend ahead of him. Because, next weekend is Halloween, and he is ...
- Linux下文件以及文件名编码转换
1.查看文件编码方式--file 文件名(但不是很准确) yang@mint-linux ~ $ file baidu.html baidu.html: HTML document, UTF-8 Un ...
- 微软OneDrive使用体验
OneDrive是微软推出的一款软件,提供类似百度网盘的功能,能够在线存储照片和文档, 号称从任意电脑.Mac 电脑或手机都可访问. 一起来看看吧,第一次用之前需要进行简单配置. 因为是一个同步盘,需 ...
- 迅为10.1寸人机界面工业HMI安卓电容屏定制生产供应商
10.1寸人机界面介绍: 配置铁电存储器:非易失性记忆体,掉电后数据不丢失. 连接云端,支持云服务:数据综合管理,更有效率. 静电防护技术:高强度抗干扰,防静电,防电磁干扰. 提供所有接口的调用源码, ...
- CAD交互绘制圆形云线批注(网页版)
js中实现代码说明: 动态拖放时的绘制事件: function DoDynWorldDrawFun(dX,dY,pWorldDraw,pData) { //自定义实体的GUID标识符 var sGui ...
- Hopfield 网络(上)
讲的什么 这部分主要对 Hopfield 网络作一大概的介绍.写了其模型结构.能量函数和网络的动作方式.主要参考了网上搜到的一些相关 PPT. 概述 早在 1982 年,Hopfield 发表的文 ...
- CPP-基础:函数指针,指针函数,指针数组
函数指针 函数指针是指向函数的指针变量. 因而“函数指针”本身首先应是指针变量,只不过该指针变量指向函数.这正如用指针变量可指向整型变量.字符型.数组一样,这里是指向函数.如前所述,C在编译时,每一个 ...
- iPhone Scrollbars with iScroll
Since we've had web browsers and JavaScript, we've been intent on replacing native browser functiona ...