做题记录 25.4.13
\(\textcolor{purple}\odot\) CF1917F Construct Tree
将 \(l\) 从小到大排序
若 \(l_{n-1}+l_n<d\) 则无解
若可以选出集合 \(S\subset l\),满足 \(l_n\in S\) 且 \(\sum S=d\),则一定有解
构造方式为把 \(S\) 中的边连成一条链,其中 \(l_n\) 为链首,把剩余的边接在链的第二个点上,这个点向左有 \(l_n\),向右至少有 \(l_{n-1}\),而剩余边最大长度不超过 \(l_{n-1}\),接在这个点上一定不会影响直径,因此构造合法
这一判定容易背包实现,时间复杂度 \(O(\frac{nd}\omega)\)
若可以选出 \(S,T\subset l\),\(S\cap T=\mathbb \emptyset\),\(\sum S\ge l_n,\sum T\ge l_n\),\(\sum S+\sum T=d\),则一定有解
构造方式为把 \(S\cup T\) 中的边连成一条链,\(S\) 中的边在 \(T\) 中的边的左侧,剩余边连在 \(S\) 和 \(T\) 之间的分界点上,构造合法性与上一种情况类似
判定容易 bitset 优化,时间复杂度 \(O(\frac{nd^2}\omega)\)
\(\textcolor{purple}\odot\) CF1917E Construct Matrix
显然 \(2\nmid k\) 时无解
当 \(4\mid k\) 时,显然可以用 \(2\times 2\) 的矩阵填充
当 \(4\nmid k\),即 \(k\equiv 2\pmod 4\) 时,分为若干区间:
- 当 \(k=2\) 时,显然只有 \(n=2\) 时合法
- \(k=4\) 的情况已经被 \(4\mid k\) 包含
- \(6\le k\le n^2-10\) 时,在左上角构造 \(\begin{matrix}1&1&0&0\\1&0&1&0\\0&1&1&0\\0&0&0&0\end{matrix}\),剩下用 \(2\times 2\) 的填充
- \(k=n^2-8\) 的情况也被 \(4\mid k\) 包含
- \(k=n^2-6\) 时,左上角为 \(\begin{matrix}0&0&1&1\\0&1&0&1\\1&0&0&1\\1&1&1&1\end{matrix}\),剩下全填 \(1\)
- \(k=n^2-4\) 被 \(4\mid k\) 包含
- \(k=n^2-2\) 时,只有 \(n=2\) 时合法
- \(k=n^2\) 被 \(4\mid k\) 包含
时间复杂度 \(O(\sum n^2)\)
\(\textcolor{blue}\odot\) CF1917D Yet Another Inversions Problem
将 \(k\) 个位置视为一段,每段内的逆序对数都等于 \(q\) 的逆序对数量,乘以 \(n\) 即为段的总贡献,这部分容易树状数组做到 \(O(k\log k)\)
然后考虑段之间的贡献,令 \(Lg=\log_2(n)+O(1)\),可表示为
后一部分容易 \(O(1)\) 计算,前一部分中的 \(\sum_{i=0}^{j-1}[p_i\ge \lfloor p_j\times2^{-o}\rfloor+1]\) 容易树状数组维护,时间复杂度 \(O(n\log^2 n)\)
总时间复杂度 \(O(\sum (n\log^2 n+k\log k))\)
\(\textcolor{blue}\odot\) CF1916E Happy Life in University
先求出 \(\text{dfs}\) 序
枚举 \(\text{lca}\) 为 \(u\),令此时的 \(c_{dfn_i}\) 为结点 \(i\) 到 \(u\) 的链上的颜色数量,则 \(u\) 的最优解为可重集 \(\{\max c_{dfl_v\sim dfr_v}\mid v\in {son}(u)\}\) 中最大值和次大值之积,其中 \(dfl_v\) 和 \(dfr_v\) 表示子树 \(v\) 内的最小最大 \(dfn\)
考虑如何维护 \(c\)
假设 \(\text{dfs}\) 到一个点时,\(c\) 中对应区间保存了相应的值,在回溯时得到父亲的区间对应的 \(c\)
假设目前回溯到 \(u\),则对于任意 \(v\) 满足 \(v\) 在子树 \(u\) 内且 \(u-v\) 的链上没有其它与 \(u\) 颜色相同的结点,使 \(c_v\) 加一
考虑在此之前进行一次 \(\text{dfs}\),每个点保存一个列表,表示这个点向下走能到达的第一个同色点,实现方式为对于每个点 \(u\),在 \(u\) 向上第一个与 \(u\) 同色的点的列表中插入 \(u\)
则对 \(c\) 的影响相当于 \([dfl_u,dfr_u]\) 加一,然后对于 \(u\) 的列表中的每个 \(v\),令 \([dfl_v,dfr_v]\) 减一
时间复杂度 \(O(\sum n\log n)\)

浙公网安备 33010602011771号