梦熊苍穹计划(NOI 模拟赛)Round 29 题解
呜呜呜我不想高考呜呜呜。
深深感受到自己的弱小。
Round 29
A
Tag:树的性质。
显然只需要求出重心的最大子树。
注意到每次重心的移动距离不超过 \(1\),而且如果要移动目标也是确定的。而最大子树容易使用树剖之类的在 \(O(\log n)\) 复杂度内维护。
B
Tag:线性代数。
考虑 \(q=1\) 怎么做。
对于每条边,设其经过次数为 \(cnt\)。那么每个节点的入出几乎守恒,可以得到一个方程;每个点两条出边几乎相同,又可以得到一个方程。可能会有 \(1\) 的差别,需要结合 \(\texttt {RB}\) 和最终位置确定。
这样你可以解出一些东西。首先题目保证了状态是可以终止的,也就是如果有解一定唯一。
但是解出来的东西不一定就是对的。充要条件是,\(cnt\) 为非负整数,且设每个点最后一次走出去的边是 \(e\) 则所有访问过的点都可以通过 \(e\) 走到终点。归纳可以证明。
这样复杂度是 \(O(qn^3)\)。
但是注意到不同方程组左边是完全一样的,所以你可以把右边的东西当向量存起来然后消元。
这样复杂度为 \(O(qn^2+n^3)\)。注意对矩阵做一些操作使得数不会太大。
C
Tag:计数,结论题。
感觉能做出这种题的不太像人。本题最核心的地方就是给合法的可重集找一个充要条件。
首先考虑这样一个问题:请在 \(S\) 中找到 \(k\) 个合法串,使得其长度和最大。
这显然是一个费用流模型,然后你瞎模拟费用流一通大概可以知道,直接贪心选最长就是对的。
然后有两个长度为 \(x\) 和 \(y\) 的合法串,则可以调整成 \(y \le v \le u \le x\) 的 \((u,v)\),只需要满足 \(\lfloor \frac{x}{2} \rfloor + \lfloor \frac{y}{2} \rfloor = \lfloor \frac{u}{2} \rfloor + \lfloor \frac{v}{2} \rfloor\),且 \(x+y=u+v\)。
显然这样调整会使得“前缀和尽可能大”这个条件变得更劣。也就是说,我们通过这样的调整可以生成所有想要的可重集。
那么假设我们选出来的是 \(l_1 \ge l_2 \ge \cdots\),可重集排序之后是 \(s_1 \ge s_2 \ge \cdots\)。
那么有一个必要条件是,任意长度的前缀 \(\sum_{i=1}^k s_i \le \sum_{i=1}^k l_i\),且 \(\sum_{i=1}^k \lfloor \dfrac{s_i}{2} \rfloor \le \sum_{i=1}^k \lfloor \dfrac{l_i}{2} \rfloor\),然后咋 DP 都行,复杂度 \(O(n^3 \log n)\)。

浙公网安备 33010602011771号