「十二省联考 2019」春节十二响
首先考虑链的情况:对左右两个子链从大到小匹配分组。
对于树上的情况,首先考虑二叉树,发现如果左右两个分组情况确定,那么合并方式显然与链相同。
然后有观察(借助上面的合并方式归纳证明):
- 对于任意一颗子树,假设最优解为 \(A\),任意一个解为 \(B\),将 \(A, B\) 从大到小排序,则 \(|A| \le |B|\) 且 \(\forall 1 \le i \le |A|, A_i \le B_i\).
- 对于任意一颗子树其最优解一定是儿子最优解合并的结果(最优子结构)
有了这两点观察之后我们只需要维护子树内最优解每个组的大小即可,可以直接启发式合并,保持有序可以使用优先队列,复杂度 \(\mathcal{O}(n \log ^ 2n)\)。
「十二省联考 2019」异或粽子
首先区间异或和转化为前缀和的差分,用堆维护以每个点为右端点的异或最大值。
每次取出一个元素后相当于要在以当前位置为右端点的区间内选取比其小的第一个区间,也就是查询第 \(k\) 大,那么可以直接用可持久化 trie 维护。
时间复杂度均 \(\mathcal{O}((n + k) \log a_i)\) 空间复杂度 \(\mathcal{O}(n \log a_i)\).
「十二省联考 2019」皮配
考虑 \(k = 0\) 的情况。
首先不难得到一个朴素的高维背包,考虑维度分离。
发现城市决定阵容,学校自己决定派系,两者互不相干,于是可以两个分开做 \(\rm dp\),求前缀和合并,复杂度 \(\mathcal{O}(Tnm)\).
对于 \(k \ne 0\) 的情况,注意到 \(k, s\) 很小,于是对于存在限制的城市和学校做朴素高维暴力,没有限制的部分做 \(k = 0\) 的做法,最后枚举限制部分的选择无限制的方案即为一个区间可以直接前缀和求出。
注意这里朴素高维暴力要对学校一个一个卷复杂度 \(\mathcal{O}(T(k ^ 2sm + nm))\),如果先把同城的卷好,每次卷的时候就是两个多项式的暴力卷积,复杂度 \(\mathcal{O}(T(k ^ 2s ^ 2m + nm))\);而前者相当于只拿了两项去卷。