LCA组合方法_专题_LCA
JueFan 一只绝帆

LCA 组合方法

组合问题的形式:通常有一个个体集合 UU,以及形式方案集合 VV,其每个元素都是个体集合的子集:vV,vU\forall v\in V,v\sube U

每种方案都有一个权值,在判定问题中是 0/10/1,在计数问题中通常是个体权值的和/积,在最优化问题中是各种不同的神秘定义。

组合问题中通常有“合法方案”这一概念,我们用判定函数 I(A)I(A) 的值 true/false 来判断,称所有合法方案构成的集合是 I\mathcal I,通常讨论的范畴是合法方案。

组合问题的分类:

  • 判定问题,询问是否有方案权值是 11
  • 构造问题,找到某个是 11 的方案。
  • 计数问题,求合法方案权值的和/积。
  • 最优化问题,求合法方案权值的最值。

通用的组合方法

最优化

在最优化问题中,可以直接规定不合法方案的权值是最劣的,此时变成了单纯的优化权值。

  • 要理清优化方向和几种限制是否同向,哪些限制在拮抗,哪些限制是不冲突的。
  • 寻找最优方案必定满足的条件,来进一步 缩小 形式方案集合,寻找到更方便的形式,调整法 是常用的策略。
  • 有时,我们也可以扔掉与优化方向 同向 的限制,增加一些不优的合法方案,来减少限制的个数,可能会找到更方便的形式。

调整法:需要保证调整后仍然是合形式的(仍然是一种满足限制的方案),且调整后不劣于调整前。

例题

LOJ#520

输入序列 hh,一张完全图上点 iijj 之间的边权是 (hihj)2(h_i-h_j)^2,求该图最小哈密顿回路。

n105n\le 10^5

输入的东西只有一个序列,所以我们排序后在数轴上考虑这个问题。

首先我们找到形式方案集合:所有回路。

回路实在太多,考虑简化该集合,我们发现顺着走比绕着走好,更具体地:如果一段路起点是路径最小的,终点是路径最大的,那么最优方法就是排序访问。

你发现最小点到最大点满足这个条件,最大点到最小点同理,所以我们简化了“回路”:变成将中间的点划分为两个集合,上集合顺次访问,下集合逆序访问。

可以写出 fi,jf_{i,j} 表示考虑了 [1,max(i,j)][1,\max(i,j)] 的所有点,上集合的最后一个点是 ii,下集合最后一个点是 jj,最小权值。

能否进一步优化?进一步地,我们发现交叉优于包含,即如果上集合的相邻点对 对 下集合的相邻点对形成了包含关系,那么我们可以交换靠后的点变成交叉关系,权值更优。

于是我们又简化了考虑集合:中间的点一定交替出现在上集合和下集合,这只有一个状态,可以直接算答案。

LOJ#521

判定/构造

在判定/构造问题中,我们通常会仿照最优化的思路来实现简化问题。

  • 最为朴素的权值是合法 11,不合法 00,最大化权值,此时我们也可以利用 调整法 筛选方案。
  • 有时,我们需要为方案定制好用的 新权值,使得 最优化该权值 和 原问题(合法性)之间是同向的,从而筛选掉更多的方案。
 评论
评论插件加载失败
正在加载评论插件
由 Hexo 驱动 & 主题 Keep
总字数 231.7k 访客数 访问量