梦熊苍穹计划(NOI 模拟赛)Round 31 题解
上场比赛不太像人能搬出来的,所以没有题解。
可恶,被卡常了。
Round 31
A
Tag:模拟。
每次修改,\(O(n)\) 重构一下每个点往四个方向的最长空格距离。
然后枚举这个点所在边界的方向,以及另一个边界的位置。容易使用并查集去维护集合中 \(\ge v\) 或者 \(\le v\) 的第一个数。
复杂度 \(O(nq \alpha(n))\)。
B
Tag:树上背包。
为啥我写的这么怪异。
设 \(dp_{u,i}\) 表示,\(u\) 节点的子树往外运送 \(i\) 个点的最小代价使得 \(u\) 子树变成二叉树。其中 \(i<0\) 表示往树内运输。
发现转移关于 \(i\) 是一个卷积。当 \(\deg(u) < 2\) 的时候可以创建新的子树。
复杂度 \(O(n^3)\),因为转移并不是背包卷积而是普通的 \(O(n^2)\) 卷积。
C
Tag:组合计数。
考虑快速算出一个位置有多少种方法不被覆盖到。发现就是一些下降幂乘起来。本质不同的情况是 \(O(n^2)\),相邻情况之间的变化是均摊 \(O(1)\) 的,直接维护就行。

浙公网安备 33010602011771号