首页 > 其他分享 >tarjan模板

tarjan模板

时间:2024-03-13 11:00:08浏览次数:19  
标签:tarjan min int dfn low now 模板

因ppt太水 遂有此文

有向图

求强连通分量

点击查看代码
void tarjan(int x)
{
	dfn[x]=low[x]=++num;
	stk.push(x);
	f[x]=1;
	for(int i=head[x];i;i=net[i])
	{
		if(!dfn[to[i]])
		{
			tarjan(to[i]);
			low[x]=min(low[x],low[to[i]]);
		}
		else if(f[to[i]])
		{
			low[x]=min(low[x],dfn[to[i]]);
		}
	}
	if(low[x]==dfn[x])
	{
		int y;
		++t;
		do
		{
			y=stk.top();
			stk.pop();
			f[y]=0;
			belong[y]=t;
			vl[t]+=v[y];
		}while(y!=x);
	}
}

重建 缩点

点击查看代码

void reb()
{
	for(int i=1;i<=n;i++)
	{
		for(int j=head[i];j;j=net[j])
		{
			if(belong[i]!=belong[to[j]]) add1(belong[i],belong[to[j]]);
		}
	}
}

无向图

求割边

点击查看代码
//存边要从2开始存
void tarjan(int x,int in_edge)
{
	dfn[x]=low[x]=++num;
	for(int i=head[x];i;i=edge[i].next)
	{
		int y=edge[i].to;
		if(!dfn[y])
		{
			tarjan(y,i);
			low[x]=min(low[x],low[y]);
			if(low[y]>dfn[x])
			{
				bridge[i]=bridge[i^1]=1;
			}	
		}
		else if(i!=(in_edge^1))
		{
			low[x]=min(low[x],dfn[y]);
		}
	}
}

求割点

点击查看代码
void tarjan(int now)
{
	dfn[now]=low[now]=++num;
	int flag=0;  
	for(int i=head[now];i;i=edge[i].next)
	{
		int y=edge[i].to;
		if(!dfn[y])
		{
			tarjan(y);
			low[now]=min(low[now],low[y]);
			if(low[y]>=dfn[now])
			{
				flag++;
				if(now!=root||flag>1) cut[now]=1;
			}	
		}
		else
		{
			low[now]=min(low[now],dfn[y]);
		}
	}
}

标签:tarjan,min,int,dfn,low,now,模板
From: https://www.cnblogs.com/CTHoi/p/18070133

相关文章

  • 矩阵模板("+" "-" "*")
    structmat{ intn,m; inta[maxn][maxn]; voidzero() { memset(a,0,sizeof(a)); } voidone() { zero(); for(inti=1;i<=n;i++) { a[i][i]=i; } } voidresize(intx,inty) { n=x; m=y; } matoperator+(constmat&A)const { mat......
  • tarjan
    缩点有向图缩点(把一个强连通分量看成一个点),用于优化。树枝边:DFS时经过的边,即DFS搜索树上的边反祖边:也叫回边或后向边,与DFS方向相反,从某个结点指向其某个祖先的边横叉边:从某个结点指向搜索树中另一子树中的某结点的边,它主要是在搜索的时候遇到了一个已经访问过的结点,但......
  • Tarjan算法求SCC,缩点
    Tanjan算法可以在O(n+m)的时间内求出强连通分量,常数小,是个非常优秀的算法。算法实现过程:dfn[x]表示x的dfs生成树上的编号,代表着时间戳,low[x]表示从x结点出发,能够访问到最早的时间戳。<1>进入u时,盖上时间戳,结点入栈。<2>枚举该点的结点的时候,分为三种情况:(1)如果该点v没有访......
  • 树链剖分【loj模板】(〃>目<)
    小声吐槽:如果不是拍了200000组没问题后瞪眼瞪出来了,我才不写呢Decribe:给定一棵\(n\)个节点的树,初始时该树的根为\(1\)号节点,每个节点有一个给定的权值。下面依次进行\(m\)个操作,操作分为如下五种类型:换根:将一个指定的节点设置为树的新根。修改路径权值:给定两个节点......
  • c++20 模板约束
    concept在c++20中,提案许久的concept被加入到标准中了,这也意味着不用再写恼人的SFINAE了(除非你是一个受虐狂,喜欢对着一堆报错中找到错误的位置)。c++20之前在c++20之前,如果需要对模板实参进行编译期检查,只能使用SFINAE,或者是部分使用c++17添加的ifconstexpr进行......
  • 15_模板模式
    模板模式是一种行为型设计模式,它定义了一个抽象类作为算法的骨架,而将一些步骤的具体实现延迟到子类中。模板模式提供了一个统一的算法流程,但允许子类根据需要重写算法的具体步骤。模板模式有三个主要角色:抽象类(AbstractClass):定义了算法的骨架,包含了一个模板方法以及一些抽象......
  • Django模板语法
    Django模版语法(1)传数据模版语法可以传递的后端python数据类型(可迭代)后端:deftest2(request):name='heart'float=11.11str_name='你好'boolean_test=Truelist_test=[1,2,3]tuple_test=(1,2,3)dict_test={'name�......
  • 滑动窗口模板
    适用情景:字符串或数组的子串或子数组模板defslidingWindow(s,t):need={}#存储字符串t中各个字符的需求量window={}#存储滑动窗口中各个字符的出现次数forcint:#遍历字符串tneed.setdefault(c,0)#访问不存在的键时自动创建并......
  • 第六十九天 BBS项目之五 js与模板语法 inclusion_tag实操,文章详情,点赞点踩
    一、昨日内容回顾#1首页文章的渲染 -模板语法的for循环-bootstrap的媒体组-显示头像:articel.blog.userinfo有可能没有:在admin中建立关系 -注册---》申请开启博客功能-图标库 -font-awesome-4.7.0#2个人站点样式 -头部导航栏-......
  • 2024新版Axure RP大数据可视化大屏模板68套及通用组件+PSD文件
    AxureRP数据可视化大屏模板及通用组件库2024新版重新制作了这套新的数据可视化大屏模板及通用组件库V2版。新版本相比于V1版内容更加丰富和全面,但依然秉承“敏捷易用”的制作理念,这套作品也同样延续着我们对细节的完美追求,整个设计制作过程我们同样投入了大量的精力。作品制作前......