梦熊苍穹计划(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)\)

posted @ 2025-06-23 23:09  M2GA  阅读(31)  评论(0)    收藏  举报