【Cactus仙人掌图】仙人掌DP学习笔记

我们从例题入手来考虑仙人掌上DP的一般规律叭.

Ex 1.仙人掌上的单源最短路问题

联想树上最短路,由于路径的唯一性可以直接做一遍O(n)的搜索.但是仙人掌上显然不具备路径的唯一性这种性质.

那么我们是否需要像对待一般的无向连通图一样使用最短路算法呢?

其实并不需要.

首先一遍DFS处理出仙人掌的结构关系.

然后我们从起点开始DP,假设当前DP到节点为x,那么枚举x的每一个儿子.如果该儿子节点是一个普通节点,那么我们直接可以得到起点到这个节点的距离.如果该儿子节点是个环,则枚举环上每一个节点v,求出v到起点距离,再从v开始DP.

同样是一个O(n)的DP.比起无脑跑最短路优越到不知道哪里去了!

Ex 2.求仙人掌的直径

对于有边权和无边权的情况我们一起处理.(无边权当成边权为1)

依然先考虑树的情况.对于树的直径,我们可以使用树形DP,对每个节点求出其深度和以其为根的子树的最大深度,然后每个节点不同儿子的最大深度+次大深度即为答案.

那么仙人掌也是类似的.

首先还是一次DFS处理出仙人掌的结构.

先提出一个子仙人掌的概念,子仙人掌x为删掉节点x到根的所有简单路径上的边后x所在的连通块.

在处理出仙人掌结构之后,我们对每个节点处理出其子仙人掌的最大深度.

对于一个节点,依然可以使用不同儿子的最大深度+次大深度来更新答案.

对于一个环,可以用环上每对节点的最大深度加上这对节点之间的最短路长度来更新答案.

此时我们有两个方法来解决:

1.枚举环上的一个节点,那么如果存在一个节点与当前节点的最短路是从当前节点出发顺时针走,这两个节点一定对应着环上的一个区间.而且不难发现,如果我们当前枚举的节点顺时针移动,这个区间的终点也会同样顺时针移动.处理这种两个端点都单调移动的RMQ问题,可以用单调队列来维护.

2.我们从环的父亲开始,按向下走哪边比较近,把环分成两个部分.可以发现,这两部分内部点对的最短路一定在内部.因此对于每个结点,它在另一部分最短路是顺时针走的一定是一个前缀,最短路是逆时针走的是一个后缀,直接处理前缀max和后缀max即可。

根据这两个例题我们可以看出,除了要DFS处理仙人掌结构是一定的以外,仙人掌上非环点的DP其实和树上DP是基本一样的,在处理仙人掌DP时候比树上DP多的就是怎样处理环上的点.

通常仙人掌上的DP都与距离有关,因此我们可以从上面两个例题中获取灵感来推广到更多问题.

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-10 08:20:00

【Cactus仙人掌图】仙人掌DP学习笔记的相关文章

树形dp学习笔记

直接放例题吧: codevs1380:没有上司的舞会 题意: 某公司要举办一次晚会,但是为了使得晚会的气氛更加活跃,每个参加晚会的人都不希望在晚会中见到他的直接上司,现在已知每个人的活跃指数和上司关系(当然不可能存在环),求邀请哪些人(多少人)来能使得晚会的总活跃指数最大. 思路: 任何一个点的取舍可以看作一种决策,那么状态就是在某个点取的时候或者不取的时候,以他为根的子树能有的最大活跃总值.分别可以用f[i,1]和f[i,0]表示第i个人来和不来. 当i来的时候,dp[i][1] += dp[

Spark图处理GraphX学习笔记!

一.什么是GraphX? Graphx利用了Spark这样了一个并行处理框架来实现了图上的一些可并行化执行的算法. 算法是否能够并行化与Spark本身无关 算法并行化与否的本身,需要通过数学来证明 已经证明的可并行化算法,利用Spark来实现会是一个错的选择,因为Graphx支持pregel的图计算模型 二.Graphx包含哪些组件和基本框架? 1.成员变量 graph中重要的成员变量分别为 vertices edges triplets 为什么要引入triplets呢,主要是和Pregel这个

【笔记篇】单调队列优化dp学习笔记&&luogu2569_bzoj1855股票交♂易

DP颂 DP之神 圣洁美丽 算法光芒照大地 我们怀着 崇高敬意 跪倒在DP神殿里 你的复杂 能让蒟蒻 试图入门却放弃 在你光辉 照耀下面 AC真心不容易 dp大概是最经久不衰 亘古不化的算法了吧. 而且有各种各样的类型 优化之类的. 一直dp都不怎么好. 而且也不太知道应该怎么提高. 基本见到不认识的dp方程就不大会推(但我会打表啊= = 所以dp还是很有的学的~ 正好最近刚刚肝了计算几何, 所以就顺带搞一下斜率优化dp一类的... 单调队列优化dp 单调队列大家都会吧? 不会的先出去学一下,

斜率优化DP学习笔记

对于一类状态转移方程可以写成 f[i]=min/max(a[i]*b[j]+G[j])+H[i](a.H是只和i有关的函数,b.G是只和j有关的函数) 且a和b至少有一个是单调的动态规划问题,我们可以通过数形结合来优化它.这类问题一般是要把一个线性序列分成若干段,暴力解决时间复杂度一般是O(n^2),如果a和b都是单调的,可以优化到O(n),如果只有一个是单调的,可以优化到O(nlog2n).. 以取最小值为例,考虑对上面的方程进行变形,H[i]显然和选取最优的转移无关,可以先抹去,将方程变为-

信息安全工程师教程学习笔记汇总(思维导图及考试要点)

信息安全工程师教程思维导图 https://www.moondream.cn/?p=178 信息安全工程师教程思维导图 链接:https://pan.baidu.com/s/1CePwH94kIEAEN0ZDhZuTEQ 密码:请进入备考群获取 信息安全工程师学习笔记汇总 信息安全工程师学习笔记一之第一章信息安全基础 第一章 信息安全基础 1.信息安全概念 2.信息安全法律法规 3.信息安全管理基础 4.信息安全标准化知识 详见知识星球-信息安全工程师  https://t.zsxq.com/A

StyleCop学习笔记——初识StyleCop

一.定义 StyleCop是微软的一个开源的静态代码分析工具,检查c#代码一致性和编码风格. 二.支持的环境. JetBrains R# 5.1.3 ( 5.1.3000.12) JetBrains R# 6.0 (6.0.2202.688) JetBrains R# 6.1 (6.1.37.86) JetBrains R# 6.1.1 (6.1.1000.82) JetBrains R# 7.0.1 (7.0.1098.2760) JetBrains R# 7.1.3 (7.1.3000.22

StyleCop学习笔记——自定义规则

本文将简单的一步一步的指导这可能有助于学习如何创建自己的规则 1.创建一个项目. Visual Studio创建一个新的类库项目.NET3.5 2.引用两个DLL,StyleCop.dll和StyleCop.Csharp.dll. 3.添加自定义的规则. MyCustomAnalyzer.cs代码如下: using StyleCop; using StyleCop.CSharp; namespace MyCustomRules { /// <summary> /// Custom analyz

Sharepoint商务智能学习笔记之Powerpivot Service Dmeo(八)

1)在Excel上添加Powerpivot工具栏 第一步,在Excel中启用Powerpivot 工具栏,新建一个空白Excel文件,在左上角点击文件,然后点击选项 2)使用Powerpivot添加数据源 第二步,使用Powerpivot组件导入数据源 3)创作数据透视图 第三步,画图,添加筛选器 4)新建Powerviot库 第四步,在Sharepoint网站后台新建Powerviot库,并把Excel上传到该库. Powerpivot库提供了Excle的预览缩略图.可以在Powerpivot

【Cactus仙人掌图】仙人掌基础知识学习笔记

首先膜一下vfk领先全球的动态仙人掌栽培技术- 然后谢谢Time-Machine学长在暑假集训时候讲了仙人掌DP. 然后感觉听得并不是很懂-所以再来对着论文学一遍顺便写一写例题代码 这一篇主要先学仙人掌的基础(定义和性质什么的) ------------线 割 分 是 我 >w<---------------– 什么是仙人掌? 仙人掌是不含自环的,一条边最多属于一个简单环的无向连通图. 从定义不难看出树其实也是仙人掌的一种,也就是说这几个概念的关系大概是: 树是一种特殊的仙人掌,仙人掌是一类特