做题记录 25.1.29
\(\textcolor{purple}\odot\) UVA1205 Color a Tree
假设当前除根外点权最大的节点为 \(u\),可证最优策略一定是在 \(fa_u\) 染色后立即染 \(u\)
因此考虑将两者合并为一个点,并计算出该操作对最终答案的贡献
定义块为原树的一个极大联通子集,满足当前为止其中的点都合并为一个点,用块中深度最小的点代表这个块
令 \(sz_u\) 表示当前 \(u\) 所在块中点的数量,\(sm_u\) 表示当前 \(u\) 所在块中点权之和
若要合并 \(u\) 和 \(fa_u\),则对于每个子树 \(u\) 中的点,其在合并后的染色时间为合并前的染色时间减去 \(sz_{fa_u}\),因此答案累加 \(sz_{fa_u}\times sm_u\)
然后令 \(fa_u\) 的 \(sz\) 和 \(sm\) 分别加上 \(u\) 的 \(sz\) 和 \(sm\)
可用并查集维护每个点当前为止树上的父亲所在块
每次合并需要求出点权最大的点,实际上是权值最大的块
可以证明,块的权值取块内所有点的权值的平均数时,在以上各种操作下等效于点权
可以用堆维护每个块
时间复杂度 \(O(\sum n\log n)\)
同题
\(\textcolor{purple}\odot\) SP3912 MTREECOL - Color a tree \(\quad\) 代码
\(\textcolor{purple}\odot\) CF1776I Spinach Pizza
若每次删去面积最小的一个三角形,则可证选出的三角形序列面积单调不降
若 \(n\) 为奇数,则选择后手,否则选择先手,这样选出面积总和一定不超过一半
时间复杂度 \(O(n^2)\)
\(\textcolor{purple}\odot\) CF414C Mashmokh and Reverse Operation
对 \(a\) 数组进行归并排序(每次划分都要分为等长区间),令 \(cnt_{0,j}\) 表示 \(a\) 中长为 \(2^j\) 的区间中左子区间对右子区间的逆序对数量,\(cnt_{1,j}\) 表示右子区间对左子区间的逆序对数量,两者容易 \(O(n2^n)\) 求出
每次操作 \(p\) 相当于交换 \(cnt_{0,0\sim p}\) 和 \(cnt_{1,0\sim p}\),交换后答案为 \(\sum_i cnt_{0,i}\)
总时间复杂度 \(O(n2^n+qn)\),可优化到 \(O(n2^n+q\log n)\) 但没有必要
\(\textcolor{purple}\odot\) CF1120D Power Tree
将所有叶子按 \(dfn\) 排序,则每个节点对应一段区间,设叶子数为 \(c\)
转化为给定 \(n\) 个区间,每个区间有权值,选择权值和最小的子集,使得对于任意长为 \(c\) 的数组,都能通过选出的区间加减调整为 \(0\),求所有可能的子集的并
考虑将目标数组差分,则区间 \([l,r]\) 加 \(v\) 等价于差分数字把 \(l\) 处的 \(v\) 移到 \(r+1\) 处,若 \(v\) 为负数则相当于反向移动,最终要全部移到 \(c+1\) 处
显然只要 \(c+1\) 个点联通即可
转化为有 \(n\) 条带权无向边(每个 \([l,r]\) 对应 \(l-(r+1)\),边权为区间的权值,即原树的点权),选出权值之和最小的一个子集,使得所有点联通,求合法方案之并
即给定 \(c+1\) 个点,求最小生成树之并
\(kruskal\) 把边权相同的边一起判断,再统一合并联通块即可
时间复杂度 \(O(n\log n)\)

浙公网安备 33010602011771号