点双联通分量,圆方树和广义圆方树
点双联通分量
边双联通分量想必看这篇博客的同学就会,并且边双联通分量理解和打起来比较简单,就不再赘述了。
点双联通分量,类比边双的定义,它是原图的极大无向子图,满足删去子图中任意一个节点以及与其相邻的边,其余节点仍然连通。
如下图,左中两个均为一个点双联通分量,但最右边图中有两个点双联通分量(上下两部分),因为删去中间的点后他们不能联通
由最右边的图可以看出,一个点可能属于多个点双联通分量,我们称这些点为割点。
这也带来了麻烦,我们处理边双的时候,直接弹栈即可,但此时我们是否需要多一些讨论?
这就需要引入圆方树
圆方树
圆方树本来是一种用来处理仙人掌问题的数据结构
广义圆方树实际上就是将其拓展到了一般的无向图中,做起来差别不大,我们都可以统称为圆方树。
做题时,常常需要面对有关无向图中两点之间的简单路径(不经过重复点)的问题
无向图中的路径十分麻烦,圆方树可以将我们所需要的信息浓缩到一棵树上。
我们将原本无向图中的点称为圆点。
对于一个点双联通分量,我们建立一个方点来代表它,点双联通分量中的所有点都向这个方点连边。
我们将上面的这些图建成圆方树后,它长这样:
可以看出,圆方树中只存在圆点与方点之间的边。
构造圆方树,同样可以利用tarjan算法
有些模板是栈里是存储边的(可以看出,一条边只会出现在一个点双中),但存储点操作起来更加的方便
void tarjan(int k,int fa)
{st[++st[0]]=k;low[k]=dfn[k]=++dfn[0];for(int i=fs[k];i;i=nt[i]){int p=dt[i];if(p!=fa){if(!dfn[p]){tarjan(p,k);if(low[p]>=dfn[k])//栈中p所在的部分与k构成了一个点双//当low[p]>dfn[k]时,这个点双只有一条边两个点。{lk(++n1,k),lk(k,n1);//新建方点n1,并向所有点双中的点连边while(st[st[0]]!=p) lk(n1,st[st[0]]),lk(st[st[0]],n1),st[st[0]--]=0;lk(n1,p),lk(p,n1),st[st[0]--]=0;}else low[k]=min(low[k],low[p]);}else low[k]=min(low[k],dfn[p]);}}
}
利用圆方树,我们避免了大量的讨论。
现在无向图中的路径问题变成了树上路径问题。
某些数据结构大神开发出了(仙人掌分治,虚仙人掌,仙人掌剖分等毒瘤玩意)。利用圆方树,这些问题都转化成树上的问题,好写又易于理解。
点双联通分量,圆方树和广义圆方树相关推荐
- 【BZOJ2730】【codevs1996】矿场建设,点双联通分量
传送门1 传送门2 思路: 前段时间学习的tarjan求双联通分量 练习的时候碰到了这样一道蛋疼的题 基本思路还是显而易见的,考虑分割联通快及计算大小来求出答案 由于之前写的都是边双联通分量,可以把无 ...
- 【9.22校内测试】【可持久化并查集(主席树实现)】【DP】【点双联通分量/割点】...
1 build 1.1 Description 从前有一个王国,里面有n 座城市,一开始两两不连通.现在国王将进行m 次命令,命令可 能有两种,一种是在u 和v 之间修建道路,另一种是询问在第u 次命 ...
- 强联通分量,双联通分量详解
正题 强联通分量 我们开两个数组 l o w , d f n low,dfn low,dfn . d f n dfn dfn 表示 i i i 点的 d f s dfs dfs 序, l o w lo ...
- 『Tarjan算法 无向图的双联通分量』
无向图的双连通分量 定义:若一张无向连通图不存在割点,则称它为"点双连通图".若一张无向连通图不存在割边,则称它为"边双连通图". 无向图图的极大点双连通子图被 ...
- 【BZOJ2959】【codevs2002】长跑,维护双联通分量
传送门1 传送门2 思路: 思路巧妙的一道数据结构 题意就是让你维护双联通分量 我一开始的想法是写两个并查集来分别维护连通性和双联通分量里的点,然后通过LCT来维护权值和,但我发现缩点时不是很好搞,而 ...
- POJ 3177 Redundant Paths(边双联通分量)
题目描述: In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numbered 1 ...
- lightoj 1300 边双联通分量+交叉染色求奇圈
题目链接:http://lightoj.com/volume_showproblem.php?problem=1300 边双连通分量首先dfs找出桥并标记,然后dfs交叉着色找奇圈上的点.这题只要求在 ...
- POJ-3352-RoadConstruction(边双联通分量,缩点)
链接:https://vjudge.net/problem/POJ-3352#author=0 题意: 给一个无向连通图,至少添加几条边使得去掉图中任意一条边不改变图的连通性(即使得它变为边双连通图) ...
- 10.31T2 点双联通分量+预处理前缀+二分答案
2.逛公园I (parka) [问题描述] 琥珀色黄昏像糖在很美的远方,思念跟影子在傍晚一起被拉长-- 小 B 带着 GF 去逛公园,公园一共有 n 个景点,标号为 1 . . . n. ...
最新文章
- java post 500_Post请求form-data格式时请求返回500的问题
- linux为用户配置java环境变量
- vue限制只能输入数字_vue的input中,如何限制只能输入number
- vv7无法启动显示发动机故障_点火系统故障引起发动机不能启动的排除方法
- springcloud项目的启动顺序_Spring Cloud微服务项目完整示例,含注册中心,网关,断路器等等...
- ASP.NET MVC 3 Beta: Built-in support for charts(MVC3 Razor中使用图表的最佳方案)
- jQuery点击行选中或者取消CheckBox
- php重写mysql类_如何成功重写旧的mysql-php代码与已弃用的mysql_ *函数?
- 简单的notepad将\n转化为换行
- java发送qq邮件
- 能力与爱好 我能熟练使用计算机,关于2020大学生简历自我评价精选5篇(心选优品)...
- 百度风云榜实时热点API
- Gateway/Zuul + OpenApi 集中管理 API 资源
- 计算机毕设Python+Vue兴澜幼儿园管理系统(程序+LW+部署)
- 神经网络的图像识别技术,神经网络图像角度分析
- Unity3D显示中文
- Shell while语句详解
- [系统]_[WIN7和WIN10]_[禁用自动更新批处理脚本]
- qq服务器断掉修改昵称,qq昵称修改 更新资料失败
- shell 浮点数计算使用bc