闵可夫斯基和学习笔记

闵可夫斯基和

  • 给定两个向量空间 AB,则闵可夫斯基和 A+B=a+b,aA,bB。当 AB 都是凸包时,他们的闵可夫斯基和也是凸包。

  • 考虑当 A 的轮廓是凸函数 (i,fi)B 的轮廓是凸函数 (j,gj) 时,A+B 的轮廓就是 (k,maxi+j=kfi+gj)。这也说明了为什么这里的 max/min 加法卷积能保持函数的凸性。

  • fg 都是凸函数时,他们的 min 加法卷积 hk=mini+j=kfi+gj 有如下的快速计算方式:

  • 考虑对 fg 做差分,有 ai=fifi1bi=gigi1。那么 hk 本质上就是取 a 的一个前缀的 b 的一个前缀,使得取得的元素个数为 k 且元素和最小。因为 ab 递增,因此本质上就是对 ab 两个数组进行归并排序,hk 就是前 k 个元素的和。也就是说,卷积后函数的斜率,等于卷积前两个函数的斜率做归并排序,这让我们可以快速对凸函数完成卷积转移。

例题

  • 2023ICPC 亚洲南京站 D

  • 这道题和使用 Slope trick 的烟火表演很像但不一样,因为 ifa[i] 之间的距离 l{0,1},所以 DP 函数右侧的拐点个数不等于儿子个数,无法直接维护最小值区间。

  • 先列出 DP 方程,设 f(u,x) 表示以 u 为根的子树满足红黑树性质,且从 u 到任意后代叶子结点路径上都有 x 个黑色点需要的最少修改次数,g(u,0/1) 是让节点 u 变红/黑的代价。于是有了一个 naive 的方程:

f(u,x)=mini{0,1}(g(u,i)+vson(u)f(v,xi))

  • 可以证明 f(u,x) 关于 x 是凸的,因为 g(u,0/1) 是凸的(仅有两个点),两个凸序列的 min 加法卷积的结果还是凸的。

  • 我们像烟火表演中那样维护差分数组。由于 f(u,x) 中的 x 的取值范围是子树深度的 min,因此 部分可以直接把子树合并起来,复杂度是 O(n) 的(可以用长链剖分证明)。而 g 的差分是 ±1,因此我们还需要支持往差分数组里插入 1 或者 1,并维持数组的单调性,这一步就对应了我们快速维护闵可夫斯基和转移。

  • 可以使用两个 vector,一个 vector 存所有负数,一个存所有整数,再开一个变量表示有几个 0。这时插入 1 就是在正数 vector 的开头插入,插入 1 就是往负数 vector 的末尾插入。u 的答案就是 f(u,0) 加上差分数组的最小前缀和,也就是负数 vector 的元素之和。这样做复杂度是 O(n) 的。

posted @   HappyJaPhy  阅读(289)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示