背包
将 \(R_i\) 缩小到颜色物品数量级别,于是 \(\sum R\le n\)。
计算框架显然是优先队列弹出时找后继。需要满足后继总和一定大于当前元素,而且转移路径是唯一的
按照次小值和最小值的差从小到大排序。维护指针表示当前考虑的物品,初始指向第一个元素。于是后继可以刻画为:
-
将当前物品的选择方案替换为其后继。
-
将下一个物品的选择方案替换为其后继并将指针挪到下一个物品处。
-
如果当前物品方案是其次小方案,那么将其替换为最小方案,将下一个元素选择方案替换为其后继,再将指针挪到下一个元素
每个物品维护一个堆,初始化为前缀最小的 \([L,R]\) 个。每个状态也另维护指针,后可以通过当前元素后移和“固定当前元素并让上一个元素右移”两种。状态的存储是 \(\Theta(1)\) 的,因为在当前指针之前的都没动过,指针之后的都不在动了,于是存一下当前指向和下一个数停止点即可
树
外侧叶子和子树祖先同色,形成封锁。
形式化而言,现在尝试解决一个子问题:子树根的祖先和子树的最左侧最右侧两个叶子同色,给剩下节点染色的方案。
比较直接的想法就是让子树最外侧直径染成同一个颜色,这对于剩下节点的染色又形成了封锁,让每个子树的两个叶子也染和链相同的颜色后递归解决,但是还是不够。
每个点的度数非常有限,那么可以让封锁效果产生在链上和每个点相邻的点之间,那么可以将链的两侧染相同的回文颜色。此时每种颜色只会出现在四个子树根的父亲位置和对应的八个叶子,最多 12 次
棋盘
二分答案,Alice 的目的是让棋子最终不落在 \(\ge mid\) 的格子上,Bob 的目的反之。此时每个人的目的就是挪到一个异色格子,不能挪的人输。
这是一个二分图博弈问题,先手必胜的条件是所有的最大匹配都覆盖了起点。证明考虑“完全覆盖”和“最大匹配”两个限制条件即可。
最大匹配全覆盖变最大独立集在删去起点前后没区别。
将 \(a,b\) 序列排序之后发现白色节点蜷缩在右下角,双指针扫出来每行每列有几个白色格子。根据上面的过程可以发现走 1e9 次和走 1 次没什么区别。设一段下缀后缀为白行白列,剩下的是黑行黑列。那么白行白列上的白格子黑行黑列行的黑格子都是独立集中元素。增加白列增量是点数加行数减 \(n\)。最优决策点单调左移,扫描即可
标签:15,当前,格子,08,元素,后继,2022,物品,指针 From: https://www.cnblogs.com/yspm/p/TestReview20220815.html