宽体树图
翘课唐完了。下次不翘了。
树形 DP 依赖于删去树根后,树分裂为若干子树;换言之,在处理一些与树上邻接性相关的信息时,只需传入树根一者的状态即可进入子树处理。
显然我们可以不止传入一个信息。我们希望找到一个阈值 ,使得我们可以递归式地为每个状态传入至多 个信息,进入子问题。
这就是我们有界树宽问题。
定义:一张图 的树分解是满足如下条件一棵树 , 上每个节点 都放置了一个集合 ,且:
- 中每个节点被至少一个 包含。
- 中每条边的两端点至少被一个 同时包含。
- 中每个节点被 包含的全体 构成连通块(换言之,如果 都包含 ,那么二者路径中的每个 均包含 )
对于 上一个节点集合 ,定义 为 中全体节点 的并集的导出子图。
树分解满足如下性质:
- 对于树上每个节点 ,删去 后树分成若干块 ,则全体 两两无交、且不相邻。
- 对于每条边 ,删去后树分成两块 ,则 无交、不相邻。
第一条性质:假设有交,不妨令 中的点 的 和 中 的 同时含 ,则 在 至 的路径上,因此必须包含 ,则 ,不合法;假设有边 ,则 在 中的分布连通块显然不能过 , 同理,于是它们不可能在同一个 内共存, 边未被任何 同时包含。
第二条性质同理。
一个树分解对应的树宽即为 。一个图的树宽为全体树分解中最小树宽。子图的树宽必然不超过母图。
一个非冗余 (nonredundant) 的树分解是任意相邻两点 不存在一个的 包含另一个的场合。通过重复将被包含的那个点缩到更大的点上,一个冗余树分解必然可以在不改变树宽的前提下变成非冗余树分解。通过不断剥叶子,可以证明非冗余树分解的点数必然不超过原图的点数。
如何求出一张图的树宽?这其实是 NP-Hard 的。但是,给定一个阈值 ,构造一个树宽小于 的树分解或判定树宽必然大于等于 ,这件事情是可以在与 有关的复杂度(具体而言,)内解决的。
如何判定树宽?
定义:两个包含相等数目节点的集合 是可分 (separable) 的,若它们间的最小割点集的大小严格小于二者共同的节点数目。即,存在集合 满足 ,且 与 在 上不连通。【注意,这并不要求 无交】
定义:一个集合 被称作 -连接 (-linked) 的,如果 且其中所有子集 都是不可分的。
可以在 的复杂度内判定一个集合 是否是 -连接的;如果不是,该算法同时可以找到可分集合对 和它对应的割点集 。
方法很简单:全体 对共有不超过 对;每一对相当于求最小割,因此在 的复杂度内即可判定是否可分。
定理:存在大小至少为 的 -连接集合意味着树宽至少为 。
假设存在非冗余的树分解 满足全体 ,同时存在 -连接、大小至少为 的集合 。
令树是有根树。令 为树上节点 子树中全体点对应的 。考虑从根往下能走就走,直到某点 ,满足 包含超过 个 中元素,但其全体儿子均不然。
显然 不是叶子(否则 ,而 )。令其有儿子们 。
假如存在一个包含至少 个 中元素的儿子 ,则从中挑出 个作为 ,从 中挑出 个作为 。因为非冗余,所以 ,而删去 后, 与 就此分别,于是 可分,违背了 是 连接的前提。
假如不存在这样的儿子,那么考虑用多个儿子组合起来,直到 中包含严格超过 个 中元素,则其必然严格小于 个。于是从其内部挑 个,再从外部挑 个,删光 即可将它们分割。
算法:给定一个阈值 ,构造一个树宽小于 的树分解或判定存在大小至少 的 -连接集合。
维护一个部分树分解:我们如今已构造了若干 ;它们应恰好成为 的某个子集(即全体 并集 )诱导子图的树分解。我们需要保证部分树分解中全体 。
由若干连通块组成,它们是相对独立的。一个连通块 拥有邻居 ,如果 与 中某一元素 相邻。
在维护部分树分解的过程中,同时维持一条额外性质,即任意时刻,每个 至多有 个邻居,这些邻居由同一个 储存(即 中诞生的新状态的父亲)。这样,每次递归就是从 中挑出不超过 个元素,把它与这不超过 个邻居放一块搞出来,作为 的儿子连出来。
如果邻居确实不够 个,那再多一个也没事。于是从 中随便挑一个,把它和这不足 个邻居放一块诞生子状态,则 分裂(不一定发生)出的所有子状态的邻居集合至多多一个新增元素,因此这样做合法。
现在邻居恰有 个,记为集合 。首先可以跑一边 -连接集合验证算法,判定邻居集合是否是 -连接的,如果是那么 的树宽显然大于 。否则其并非 连接的,存在两个集合 ,通过删去某个 而不连通。
因为 各自都与 中有边,所以 不可能不含 中元素。取 ,则 且 。令 为 作为 的儿子,则其合法,因为:
令 为 中剔除 中元素的部分。则 中的每个元素关于与 是否联通,分成两个集合,每个集合的邻居集合都是 中用 二者其一换成了 ,因此邻居数量仍然保持在 内。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 【杂谈】分布式事务——高大上的无用知识?