码迷,mamicode.com
首页 > 其他好文 > 详细

无向图的强连通分量

时间:2018-03-01 13:31:52      阅读:256      评论:0      收藏:0      [点我收藏+]

标签:版本   href   lan   .com   div   强连通   line   lock   alt   

 

本篇博客存在非常大的概念上的错误(算法没有错误)

更正的版本在这里

http://www.cnblogs.com/zwfymqz/p/8480552.html

http://www.cnblogs.com/zwfymqz/p/8480429.html

对此,我表示深深地抱歉

 

 

 

 

在学习无向图的强联通分量之前

你首先要明白有向图的强联通分量 

 

以前的自己too naive ,这玩意儿其实叫边双联通分量QWQ。。

 

定义

对于任意两个点,如果存在至少两条互相不重合的路径,使得这两点可以相互到达,那么这两个点就属于同一个强联通分量

比如说

技术分享图片

 

 

 在这张图中,

$1,2,3$属于一个强联通分量

$4$属于一个强联通分量,因为$3,4$只有一条可以相互到达的路径

 

 

实现

和有向图的强联通分量类似

都是用Tarjan算法实现

在求无向图的强联通分量重,我们不允许走已经走过的边

所以我们在Tarjan的过程中还需要记录一个father

走的时候只能走目标节点不是father的点

int Tarjan(int now,int fa)
{
	dfn[now]=low[now]=++tot;
	vis[now]=1;
	s.push(now);
	for(int i=head[now];i!=-1;i=edge[i].nxt)
	{
		if(dfn[edge[i].v]==0)	
			Tarjan(edge[i].v,now),low[now]=min(low[now],low[edge[i].v]);
		else if(vis[edge[i].v]&&edge[i].v!=fa)	
			low[now]=min(low[now],dfn[edge[i].v]);
	}
	if(dfn[now]==low[now])
	{
		int top;
		++colornum;
		do
		{
			top=s.top();	color[top]=colornum;
			vis[top]=0;	s.pop();
		}while(top!=now);
	}
}

 

 

例题

放一道我们考试的题目

  技术分享图片

题解点这里
向下翻到第三题

 

 

 

 

 

无向图的强连通分量

标签:版本   href   lan   .com   div   强连通   line   lock   alt   

原文地址:https://www.cnblogs.com/zwfymqz/p/7800271.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!