首页 > 其他分享 >圆方树 useful things

圆方树 useful things

时间:2023-11-08 19:46:27浏览次数:32  
标签:useful 点双 things 方点 圆方树 low 圆点 now

圆方树,是解决仙人掌问题的实用方法,假设最初图都是圆点,对于每个环新建一个方点并连接这个环上所有圆点,能很好规避同一个点可能属于很多个环的情况,并且发现build完之后是一棵树

广义圆方树,能够不局限于去解决仙人掌问题,能上升到无向图层面,很好解决图上路径类,等等问题

那么如何建立圆方树?有点类似 \(v-dcc\) ,建立方点,连接当前点双联通分量的所有点,实现通过tarjan算法

但注意 \(v-dcc\) 把整个点双联通分量都缩成一个点了,圆方树还保持着圆点,也就是说圆方树点数是 \(n+k\) ,其中 \(k\) 标号是点双个数

具体实现不详讲,但存在值得注意的细节:

令 \(now\) 为当前 \(dfs\) 到的节点, \(y\) 为其搜索树上的一个儿子。注意, \(now\) 与 \(y\) 在栈中不一定相邻。也就是说,下面两种写法:

  1. 弹出栈顶直到弹出 \(now\) 为止;最后再压入 \(now\)
  2. 弹出栈顶直到弹出 \(y\) 为止,最后再将虚点向 \(now\) 连边
    前者错误,后者正确。

代码:
圆方树,是解决仙人掌问题的实用方法,假设最初图都是圆点,对于每个环新建一个方点并连接这个环上所有圆点,能很好规避同一个点可能属于很多个环的情况,并且发现build完之后是一棵树

广义圆方树,能够不局限于去解决仙人掌问题,能上升到无向图层面,很好解决图上路径类,等等问题

那么如何建立圆方树?有点类似 \(v-dcc\) ,建立方点,连接当前点双联通分量的所有点,实现通过tarjan算法

但注意 \(v-dcc\) 把整个点双联通分量都缩成一个点了,圆方树还保持着圆点,也就是说圆方树点数是 \(n+k\) ,其中 \(k\) 标号是点双个数

具体实现不详讲,但存在值得注意的细节:

令 \(now\) 为当前 \(dfs\) 到的节点, \(y\) 为其搜索树上的一个儿子。注意, \(now\) 与 \(y\) 在栈中不一定相邻。也就是说,下面两种写法:

  1. 弹出栈顶直到弹出 \(now\) 为止;最后再压入 \(now\)
  2. 弹出栈顶直到弹出 \(y\) 为止,最后再将虚点向 \(now\) 连边
    前者错误,后者正确。

\(v-dcc\) 和圆方树运用区别何在?后者对于点双内部的处理能够非常方便,而前者似乎处理整个点双对答案的贡献(不考虑单点)会十分好

圆方树的性质:

  1. 是树

  2. 每条边都是方点和圆点连接边

  3. 每个方点对应一个点双联通分量

  4. 方点的度数是点双联通分量的大小

  5. 圆点是割点才有超过1个儿子,否则只连接一个方点

  6. 圆方树上两个点的路径经过的圆点是图上两点之间的必经点

还有一些点双的小性质:对于一个点双的两点,它们之间简单路径的并集等于这个点双集合

圆方树能够很好地将无向图上问题转化为树上问题,进行统计类的时候可能割点会被统计多次,所有一般把方点赋为-1,然后就很好做了

void tarjan(int x){
	++nown;
	dfn[x]=low[x]=++num;
	st.push(x),w[x]=-1; 
	for(int i=head[x];i;i=edge[i].Next){
		int to=edge[i].to;
		if(!dfn[to]){
			tarjan(to);
			low[x]=min(low[x],low[to]);
			if(low[to]>=dfn[x]){
			    addedge2(++diannum,x),addedge2(x,diannum);
				++w[diannum];
				while(1){
					addedge2(diannum,st.top()),addedge2(st.top(),diannum);
					++w[diannum];
					if(st.top()==to){
						st.pop();
						break;
					}
					st.pop();
				}
			}
		}
		else low[x]=min(low[x],dfn[to]);				
	}
}

\(v-dcc\) 和圆方树运用区别何在?后者对于点双内部的处理能够非常方便,而前者似乎处理整个点双对答案的贡献(不考虑单点)会十分好搞

圆方树的性质:

  1. 是树

  2. 每条边都是方点和圆点连接边

  3. 每个方点对应一个点双联通分量

  4. 方点的度数是点双联通分量的大小

  5. 圆点是割点才有超过1个儿子,否则只连接一个方点儿子

  6. 圆方树上两个点的路径经过的圆点是图上两点之间的必经点

还有一些点双的小性质:对于一个点双的两点,它们之间简单路径的并集等于这个点双集合

圆方树能够很好地将无向图上问题转化为树上问题,进行统计类的时候可能割点会被统计多次,所有一般把方点赋为-1,然后就很好做了,等等就不细说了

标签:useful,点双,things,方点,圆方树,low,圆点,now
From: https://www.cnblogs.com/blueparrot/p/17818136.html

相关文章

  • 圆方树 useful things
    圆方树,是解决仙人掌问题的实用方法,假设最初图都是圆点,对于每个环新建一个方点并连接这个环上所有圆点,能很好规避同一个点可能属于很多个环的情况,并且发现build完之后是一棵树广义圆方树,能够不局限于去解决仙人掌问题,能上升到无向图层面,很好解决图上路径类,等等问题那么如何建立圆......
  • 国产开发板上打造开源ThingsBoard工业网关--基于米尔芯驰MYD-JD9X开发板
    本篇测评由面包板论坛的优秀测评者“JerryZhen”提供。本文将介绍基于米尔电子MYD-JD9X开发板打造成开源的Thingsboard网关。Thingsboard网关是一个开源的软件网关,采用python作为开发语言,可以部署在任何支持python运行环境的主机上,灵活性很高,修改代码相对比较方便。它可以作为一......
  • 使用M-Things测试KepserverEX时起始地址问题
    当使用M-Things对KepserverEX的ModbusTCP服务器进行通信测试时,需要在KepserverEX中禁用从零开始寻址,或者M-Things中访问的地址需要偏移一位,如KepserverEX中400100寄存器,M-Things使用400099访问。......
  • 圆方树
    圆方树的引入我们知道,图没有很好的性质,而树有很多性质,并且容易通过很多方式来维护树上信息,因此将图上问题转化为树上问题是我们想要解决的。圆方树就是将图转化为树的数据结构。圆方树的分类圆方树分为两类:狭义圆方树,广义圆方树。狭义圆方树狭义圆方树是可以用来将仙人掌图转......
  • Things3 工作流
    Things工作流Content有任何事情都记录下来,心中的任何想法都不要放过定时整理收件箱(需要保证整理完收件箱之后,任务都是可执行的)如果有事情2分钟就能解决,那么直接去做,属于小事情如果需要15-30分钟,则标记上标签如果需要1小时以上,就将任务设置成项目做一次任务分解,分解......
  • Thingsboard网关总结
    1概述Thingsboard网关是一个开放源代码的解决方案可让您使用Thingsboard集成连接到旧系统和第三方系统的设备。运行需要python3.7+的环境。2安装一般使用源码进行安装,其步骤如下:1、从代码仓库克隆代码, 2、进入代码目录,使用setup.py脚本安装python模块,python3setup.pyinsta......
  • thingsboard介绍
    ThingsBoard可用于:设备管理,资产和客户并定义他们之间的关系。基于设备和资产收集数据并进行可视化。采集遥测数据并进行相关的事件处理进行警报响应。基于远程RPC调用进行设备控制。基于生命周期事件、RESTAPI事件、RPC请求构建工作流。基于动态设计和响应仪表板向你的客......
  • ThingsBoard 前端项目背景图片部件开发
    前言ThingsBoard是目前Github上最流行的开源物联网平台(14.4kStar),可以实现物联网项目的快速开发、管理和扩展,是中小微企业物联网平台的不二之选。本文介绍如何在ThingsBoard前端项目中开发背景图片部件。产品需求最近接到产品经理一个需求,在TB仪表板中部件的下面可......
  • Unity业务抽象套路二、EIP Everythings Is Prefab
     为什一些控制、数据管理的逻辑也要做成Prefab?好处:可以在Inspector中调整参数(而不是散落在各个配置文件中)调试时能够在Inspector确认具体数值自然地支持一系列方法:携程、定时、Update、FixedUpDate注意:有人习惯将配置写成ScriptableObject然后统一以此来管理。个人建......
  • ThingsKit物联网平台告警中心之告警联系人
    告警联系人是指接收告警信息的人,产生告警后,会第一时间通知他。新增点击新增告警联系人按钮,填入相关信息,确认新增。告警联系人参数参数说明联系人姓名定义告警通知到的联系人名称必填支持输入的格式:中英文、字符、数字支持输入的长度限制:30个字符||所属组......