首页 > 其他 > 详细

有向图连通性tarjan

时间:2020-07-16 23:16:29      阅读:47      评论:0      收藏:0      [点我收藏+]
  • 有向图连通性tarjan
int nc[M],vc[M],hc[N],cc;
int s[N],to=1,in[N],c[N];
vector<int> sc[N];
int dx,ct;
int df[N],lo[N];
void adc(int x,int y)
{
	nc[++cc]=hc[x];hc[x]=cc;v[cc]=y;
}
void tar(int no)
{
	df[no]=lo[no]=++dx;
	s[to++]=no;in[no]=1;
	for(int i=h[no];i;i=nx[i])
	{
		if(!dfn[v[i]])
		{
			tar(v[i]);
			lo[no]=min(lo[no],lo[v[i]]);
		}
		else if(in[v[i]])
			lo[no]=min(lo[no],df[v[i]]);
	}
	if(df[no]==lo[no])
	{
		++ct;
		while(s[to-1]!=x)
		{
			c[s[to-1]]=ct;
			in[s[to-1]]=0;
			--to;
		}
	}
}
void bc()
{
	for(int i=1;i<=n;i++)
	{
		for(int p=h[i]];p;p=nx[p])
		{
			if(c[v[i]]!=c[i])adc(c[v[i]],v[i]);
		}
	}
}

有向图连通性tarjan

原文:https://www.cnblogs.com/hangzz/p/13325448.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!