2020 Summer #3

0x01 Distance in Tree

\(f(i, j)\) 表示到 \(i\) 距离为 \(j\) 的节点个数。

先正着做一遍,得到 \(i\) 子树中的答案;再倒着做一遍,注意去重。

0x02 Book of Evil

\(f(i, \mathrm{Mask})\),其中 \(\mathrm{Mask} = 0\)\(\mathrm{Mask} = 1\) 分别表示距 \(i\) 最远和次远的怪物到 \(i\) 的距离。

类似求树的直径

0x03 Berland Federalization

题意即删除最少数量的边使得恰有一连通块大小为 \(k\)

\(f(i, j)\) 表示在 \(i\) 的子树中得到包含 \(i\) 的大小为 \(j\) 的连通块要删除的最小边数。

0x04 Treeland Tour

\(f(i)\) 表示以 \(i\) 结尾的最长上升子序列的长度。

先以 \(1\) 为根,\(O(n^2)\) 求出 \(f(i)\);再 \(O(n^2)\) 换根。

0x05 Centroids

注意到若以某个点 \(u\) 为根,则其有且仅有一棵大小大于 \(\dfrac n 2\) 的子树。

不妨设该子树的根为 \(v\),则为使 \(u\) 成为重心,我们贪心地取 \(v\) 的最大的大小不超过 \(\dfrac n 2\) 的子树,将其改接到 \(u\) 上。

\(f(i, \mathrm{Mask})\),其中 \(\mathrm{Mask} = 0\)\(\mathrm{Mask} = 1\) 分别表示 \(i\) 最大和次大的子树大小。

0x06 Substring

\(f(i, a) = \displaystyle\max_p \{ count(p, a) \}\),其中 \(p\) 为以 \(i\) 结尾的路径,\(count(p, a)\) 表示路径 \(p\) 中字母 \(a\) 的个数。

拓扑排序转移并判环。

0x07 Journey

\(f(i, j)\) 表示从 \(1\)\(i\) 共经过 \(j\) 个点的最短时间。

0x08 Pashmak and Graph

\(f(i)\) 表示以 \(i\) 结尾的最长合法路径的长度。

考虑将边排序,依次用起始点更新到达点。注意大小相同的边不能互相影响。

0x09 Kefa and Dishes

\(f(\mathrm{Mask})\) 表示吃掉集合 \(\mathrm{Mask}\) 中的菜能获得的最高满意度,其中 \(\mathrm{Mask}\) 的第 \(i\) 二进制位为 \(1\)\(0\) 分别表示第 \(i\) 道菜是否在集合中。

枚举最后吃的菜转移。

0x0A Cunning Gena

考虑将朋友按需要的显示器数量升序排序,如此可保证若选了第 \(i\) 个朋友,则一定可以选 \(1\)\(i\) 中任意一个朋友。

\(f(\mathrm{Mask})\) 表示做出集合 \(\mathrm{Mask}\) 中的题付给朋友的最少钱数,每次枚举新的朋友后更新答案。

0x0B Captains Mode

显然无论 ban 或 pick 都只会考虑最强的 \(m\) 个英雄。

\(f(i, \mathrm{Mask})\) 表示前 \(i\) 个操作,英雄的状态是 \(\mathrm{Mask}\) 的最大分差,这里最大分差为执行第 \(i\) 个操作的队伍对另一队伍的分差。

故若最后一个操作的是第二个队伍,则答案取相反数。

0x0C Clear The Matrix

\(f(i, \mathrm{Mask})\) 表示前 \(i-1\) 列已变为 .,第 \(i\)\(i+3\) 列状态为 \(\mathrm{Mask}\) 的最小花费。

预处理各操作的二进制状态。

0x0D Rotate Columns (easy version)

\(f(i, \mathrm{Mask})\) 表示前 \(i\) 列已经有最大值的行的集合为 \(\mathrm{Mask}\) 的最大和。

0x0E Rotate Columns (hard version)

注意到只需考虑最大值最大的 \(n\) 列。

之后同 easy version。

0x0F Random Task

注意到 \([n+1, 2n] \cap \mathbb N\) 中二进制表示恰有 \(k\)\(1\) 的数个数单调不降。

二分 + 数位 DP。

0x10 The Maths Lecture

数位 DP,记录模 \(k\) 的余数,从低位向高位做。

0x11 Magic Numbers

数位 DP,与 0x10 类似,注意判断奇偶。

\(l-1\) 可能退位,故先算 \(ans(1, r) - ans(1, l)\),再单独计算 \(l\)

posted @ 2022-04-09 21:40  johnsmith0x3f  阅读(10)  评论(0)    收藏  举报