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\)。

浙公网安备 33010602011771号