2023 ICPC 亚洲区域赛济南站 B. Graph Partitioning 2

news/2025/1/8 15:22:02/文章来源:https://www.cnblogs.com/YzaCsp/p/18659763

前言

讲还是要多听, 这个很重要啊

思路

赛时的思路不太正确啊

容易想到树形 \(\rm{dp}\) , 考虑令 \(f_{u, i}\) 表示对于 \(u\) 子树, 拆分出一块包含 \(u\) 的大小为 \(i\) 的连通块的方案数

考虑转移, 类似树上背包

\[f_{u, k} \gets \sum_{v \in son(u) , i + j = k} f_{v, i} \times f_{u, j} \]

逐个插入即可, 树上背包的上下界优化证明了这个的复杂度为 \(\mathcal{O} (nk)\)

对于 \(k\) 比较小的情况下, 直接使用这个算法是正确的
那么 \(k\) 比较大的呢?
考虑 \(k\) 比较大的时候怎么简化运算, 实际上此时可以被使用的状态是很少的, 具体的原因是, 假设你分了 \(x\) 个大小为 \(k\) 的块, 当然也可以计算出大小为 \(k + 1\) 的块的个数 $\displaystyle y = \left\lfloor \frac{size - xk}{k + 1} \right\rfloor $ , 所以当前覆盖 \(u\) 的块的大小为 \((size - xk) \textrm{ mod } (k + 1)\) , 容易发现的是 \(x\) 数量很少啊, 所以对应的覆盖 \(u\) 的块的大小的数量也就很少啊
需要注意的是, \((size - xk) \textrm{ mod } (k + 1) = 0\) 对应了两种情况, 必须新开一维确定这个的大小

考虑根号分治

  • 对于 \(k \leq \sqrt{n}\)
    直接使用树形背包
  • 对于 \(k \geq \sqrt{n}\)
    记录分出大小为 \(k\) 的块的个数, 转移即可

考虑 \(k \geq \sqrt{n}\) 时的具体转移
\(g_{u, i, 0/1}\) 表示对于 \(u\) 子树, 拆分出了 \(i\) 块大小为 \(k\) 的连通块, 其中 \(u\) 所在连通块大小是否为 \(k + 1\) 的方案数
假设当前考虑到了儿子 \(v\) , 还是逐个插入
首先写出简单形式的转移

\[g_{u, k} \gets \sum_{v \in son(u), i + j = k} g_{u, i} \times g_{v, j} \]

考虑 \(k + 1\) 的约束

首先对于 $ (size - xk) \textrm{ mod } (k + 1) \neq 0$ 和 $ (size - xk) \textrm{ mod } (k + 1) = 0$ 但是钦定了大小不为 \(k + 1\) 的情况正常处理

\[g_{u, k, 0} \gets \sum_{v \in son(u), i + j = k} g_{u, i, 0} \times g_{v, j, 0} \]

然后处理特殊情况 $ (size - xk) \textrm{ mod } (k + 1) = 0$

\[\begin{align*} & g_{u, k, 1} \gets g_{u, i, 1} \times g_{v, j, 1} \\ & g_{u, k, 1} \gets g_{u, i, 0} \times g_{v, j, 0} \\ & g_{u, k, 1} \gets g_{u, i, 1} \times g_{v, j, 0} \\ & g_{u, k, 0} \gets g_{u, i, 0} \times g_{v, j, 1} \end{align*} \]

意义从上到下依次为

  • 两个 \(k + 1\)\(v\)\(k + 1\) 留下 \(k + 1\)
  • 两个块拼起来恰好为 \(k + 1\)
  • \(v\) 的连通块大小为 \(0\)
  • \(v\) 的连通块大小为 \(k + 1\) , 直接删除

合并结束后, 类似的, 将所有连通块大小为 \(k\) 的状态更新一遍

\[f_{u, i + 1, 0} \gets f_{u, i, 0} \]

实现

框架

实现需要比较精细, 对我来说不好搞

其他的就是根据上面的模拟
注意树上背包的上下界优化不要写挂了
本质上就是双双合并的 \(\rm{trick}\)

代码

总结

树上背包的常见合并方式, 正确性不显然, 但是搞得很明白了
注意这一类背包要求每一颗子树都要合并进来, 特殊的实现方式
误区在如果这棵树在实际上没有合并, 本质上是 \(f_{v, 0}\) 的方案数, 实际上还是在合并

稍微总结一下树上背包:
合并之后再做整体操作, 合并之前可以根据意义初始化

一个暴力算法无法通过时, 考虑根号分治
分治的另一个算法当然可以使用更好的性质

\(\rm{dp}\) 这种问题, 尽量将状态限制成确定的

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/865906.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

年货抢购狂潮来袭,协作效率如何提升?

每年春节,都是电商企业竞争最激烈的战场。从年前的大促销到年后的物流爆单,作为电商团队的一员,你是否为节日期间高强度的工作节奏而焦虑?特别是在跨部门协作时,沟通不畅、任务延误、文档混乱等问题是否成为了团队效率的致命瓶颈? 在这一背景下,在线文档协作成为了提升春…

ASE100N10-ASEMI中低压N沟道MOS管ASE100N10

ASE100N10-ASEMI中低压N沟道MOS管ASE100N10编辑:ll ASE100N10-ASEMI中低压N沟道MOS管ASE100N10 型号:ASE100N10 品牌:ASEMI 封装:TO-220 批号:最新 最大漏源电流:100A 漏源击穿电压:100V RDS(ON)Max:8.8mΩ 引脚数量:3 芯片个数: 沟道类型:N沟道MOS管、低压MOS管 …

raylib U1S05 - 添加一个开始页面

先来看效果 看之前让我吐个槽。刚才编辑一半,结果我手贱点了个退出登录,然后都没了˃̣̣̥᷄⌓˂̣̣̥᷅开始按钮的图片是用豆包AI生成的,然后用美图秀秀抠图,改颜色。懒得自己搞素材的同学保存下面的三个图,注意改名字。普通状态 鼠标放上去 鼠标点击start_normal.png …

KES(KingBaseES)集群部署实战

今天我们将探讨关于KES(KingBaseES)的集群部署方案。作为示例,我们将以读写分离(RWC)集群为例,快速在本地进行部署和安装,并深入了解KES的部署流程。在本章中,我们将采用Windows平台上的可视化部署工具来进行集群的安装和配置。然而,由于硬件资源有限,本次演示仅展示…

测试图片功能

博客园的链接:123图床的链接:

JMeter-临界部分控制器-控制请求按顺序执行

一、路径: 二、操作: 把请求按顺序放到临界控制器下,请求会按顺序执行 三、执行效果

ArmSoM RK3588/RK3576核心板,Rockchip摄像头使用

1. Camera 简介​ArmSoM系列产品使用的是mipi-csi接口的摄像头ArmSoM-Sige7支持双摄同显: 2. RK3588硬件通路框图​rk3588支持2个isp硬件,每个isp设备可虚拟出多个虚拟节点,软件上通过回读的方式,依次从ddr读取每一路的图像数据进isp处理。对于多摄方案,建议将数据流平均分…

nifi下载Win版本安装成功运行_network

一、Apache nifi相关网址 https://nifi.apache.org/ 官网 https://nifi.apache.org/docs.html 文档 https://nifi.apache.org/download.html 下载页## 二、Apache nifi本地安装 进入https://nifi.apache.org/download.html解压到本地 bin目录下有启动和停止的…

策略梯度AC算法 - CartPole环境, 使用RNN作为策略网络

本文给出了使用RNN作为策略网络的AC算法代码示例,并在CartPole环境跑出结果。参考资料:Vanila Policy Gradient with a Recurrent Neural Network Policy – Abhishek Mishra – Artificial Intelligence researcher 动手学强化学习-HandsOnRL,本文中展示的代码都是基于《动…

Harbor配置https

harbor是不附带任何证书的,因此默认情况下使用http来进行访问 K8S在使用harbor作为私有仓库时或生产环境下强烈建议使用https 生成证书 生产环境下,需要从CA获取证书,测试或者开发可以使用OpenSSL自己生成证书 生成私钥 # 创建证书的存储目录 mkdir /home/ssl cd /home/sslo…