首页 > 其他分享 >基环树

基环树

时间:2024-09-05 12:03:41浏览次数:6  
标签:dep vis int void dfs 基环树 fa

找环

无向图

拓扑排序找环

点击查看代码
bool vis[N];
queue<int> q;
void tp()
{
	for(int i=1;i<=n;i++) if(du[i]==0) q.push(i);
	while(!q.empty())
	{
		int x=q.front();
		for(int i=h[x];i;i=nxt[i])
		{
			int y=to[i];
			if(du[y]>1) //入度>=2的点即为环上的点 
			{
				du[y]--;
				vis[y]=1;
				if(du[y]==1) q.push(y);
			}
		}
	}
}

dfs找环

点击查看代码
int dep[N],fa[N],cnt;
void dfs(int u)
{
	dep[u]=++cnt;
	for(int i=h[u];i;i=nxt[i])
	{
		int v=to[i];
		if(v==fa[u]) continue;
		if(dep[v])
		{
			if(dep[v]<dep[u]) continue;
			vis[v]=1;
			for(;v!=u;v=fa[v])
			{
				vis[fa[v]]=1;
			}
		}
		else fa[v]=u,dfs(v);
	}
}

有向图

相比于无向图很容易处理,只需要不断dfs即可

点击查看代码
int fa[N];
void dfs(int u)
{
	vis[u]=1;
	if(vis[fa[x]]) mark=x;
	else dfs(fa[x]);
	return ;
}

标签:dep,vis,int,void,dfs,基环树,fa
From: https://www.cnblogs.com/zhengchenxi/p/18396802

相关文章

  • 基环树的一些基本问题
    其实没啥。主要就两个一、求基环树的最大直径二、判环的简洁办法其中第一个问题比较关键,是一个非常常用的基环树森林模型。而且我基环树虽然写了7,8道了,写的却总是很冗长。基本全靠码力弥补才勉强不出错。。最近写的题目也是调了很久不出来,就是代码不够简洁导致的。很多细节可......
  • 学习笔记 ---- 基环树
    目录算法解析基环树与基环森林模板例题[NOIP2018提高组]旅行[ZJOI2008]骑士[IOI2008]IslandLongWaytobeNon-decreasing算法解析基环树与基环森林基环树是指有且仅有一个环的树。基环森林是指若干棵基环树构成的森林。对于有向图,基环树可分为内向基环树和外向基环......
  • 基环树
    基环树一棵树多了一条边。。。就变成了基环树。首先把这个环找出来,对于这个环,断掉一条边就变成树了,固定一个端点跑树形dp。城市环路很板子,没坑点。找环可以用并查集,不用知道具体有哪些点。我们只需要找出其中一条边的两个端点作为断点就好了。for(inti=1;i<=n;i++){ int......
  • 基环树
    定义(图片来自这篇文章)基环树:有\(n\)个点\(n\)条边的连通图外向树:每个点出度为\(1\)内向树:每个点入度为\(1\)找环\(dfs\)拓扑排序一般处理方法因题而异,一般有两种常用的第一种是先断掉环边,把环上点当作根,处理每一棵子树,再在环上处理,可能需要......
  • 基环树
    基环树定义在树形结构中添加一条边形成的图。分类无向图基环树内向基环树,每个点的出度为1。外向基环树,每个点的入度为1。找环:方法1:无向图基环树找环。拓扑排序,去掉环以外的点,剩下的就是一个那个环。方法2:有向图和无向图均适用。原理:在搜索树中检查一个点\(x\)的......
  • 基环树
    在树形结构中添加1条边形成的图分类:1.无向图基环树2.内向基环树,每个点出度为1的情况一棵内向基环树3.外向基环树,每个点入度为1的情况找环方法1:无向基环树找环1.统计节点的度数deg[i]2.将度数为1的点入队3.循环从队首取出节点x并将x的邻接点y度数减14.若deg[y]==1......
  • 基环树和笛卡尔树
    基环树就是比平常的树多一条边,有\(n\)条边,也就有一个环在里面。基本思想就是断环,跑树形\(dp\),或者用拓扑排序判环去跑环形\(dp\)。树的直径今天才了解到的,用两遍\(dfs\)跑。首先第一遍找到离根节点最远的节点\(u_1\),然后再从\(u_1\)找到离它最远的节点\(u_2\),那么......
  • 基环树和笛卡尔树
    1.基环树定义:有\(n\)个点和\(n\)条边的图,就是给树连了一条边,此时图中恰好只有一个环解决这类问题时,通常断环,变成普通的树的问题,然后再特殊处理环P2607[ZJOI2008]骑士click断环成树后就跟没上司一样是个树形dp,注意森林,longlong就行了,具体细节见这里P5022[NOIP2018提高组......
  • 基环树
    基环树1.定义基环树是一个由n个点及n条边组成的连通图,其比树多出一条边,所以称作基环树。2.分类基环树分为无向基环树和有向基环树。而有向基环树又分为内向基环树和外向基环树。内向基环树,即每个点出度为1的基环树;外向基环树,即每个点入度为1的基环树。3.解决方式对于有关......
  • 基环树
    基环树的定义为:一个有向或无向图中,只含有一个环的图,形式化的表达为:关于这种形状关键点主要在于找环,那么我们可以一步一步的去寻找,当这个点走着走着走到了某个环里,我们可以直接遍历整个环,然后打个标记,这样环就找到了具体的例题:E-ReachabilityinFunctionalGraph本题就是一......