Live2D

Solution Set -「NOI Simu.」2022.07.21

\(\mathscr{Summary}\)

  有意思的是, 难度诈骗居然在我身上打出了暴击.

  (首先还是吐槽一下 \(5\text h\) 的模拟赛因为早读和早课变成 \(4\text h\) 这档事, 确实比较乱节奏.)

  A 题签得挺快. B 被论文诈骗根本没有从过题角度思考. C 确实傻了, 感觉形式很想 Boruvka 就可劲儿编做法, 发现做不来可劲儿写 LCT, 最后得到了暴力 Kruskal 的乞丐分.

  强制每到题用一个固定的时间思考满分算法或许是不错的选择. 毕竟不过几题垫底就稳了.

\(\mathscr{A\sim}\) 轻松的音乐

  给定 \(\{p_n\},\{a_n\}\), 对于每个 \(i\), 其可以用一个区间覆盖 \([i-p_i,i)\) 或者 \((i,i+p_i]\), 求未必覆盖的 \(a\) 之和的最小值.

  \(n\le5\times10^4\), \(m:=\max\{p_i\}\le30\).


  考场上一眼的 \(\mathcal O(nm^2)\): 令 \(f(i,j,k)\) 表示考虑了 \(1..i\) 的区间, 假设 \((i-j,i]\) 被后面的区间覆盖, 当前覆盖到 \([i,i+k)\) 时的最小和. 转移很简单.

  这个算法慢在完全用 DP 进行策略优化, 事实上可以加入一些底层贪心. 令 \(f(i,j)\) 表示考虑了前 \(i\) 个区间, 覆盖到 \(j\) 的最小和. 仍然是讨论 \(i\) 区间的方向, 简单处理一下转移可以做到 \(\mathcal O(nm)\).

\(\mathscr{B}\sim\) 论文题

  给定 \(\{a_n\}\), 初始有 \(a_i\) 个颜色为 \(i\) 的球. 每一时刻在所有球中均匀随机两个不同且有序的球 \(x,y\), 将 \(x\) 的颜色变为 \(y\) 的颜色. 求所有球同色时的期望时刻. 答案模 \((10^9+7)\).

  \(n\le2.5\times10^3\), \(m:=\max\{a_i\}\le10^5\).


  Tags:「A.DP-概率/期望 DP」「B.Tricks」

  法一 上势能. 设 \(A\) 为一个局面下颜色的出现次数集合, 定义

\[\Phi(A)=\sum_{a\in A}\varphi(a). \]

这里做出了把势能摊到每种颜色上的初步转化. 令常数 \(s=\sum_{a\in A}a\), 考虑一次操作得到的 \(A^*\):

\[\Phi(A^*)=\sum_{a\in A}\frac{a(a-1)+(s-a)(s-a-1)}{s(s-1)}\varphi(a)+\frac{a(s-a)}{s(s-1)}(\varphi(a-1)+\varphi(a+1)). \]

我们自然希望 \(\Phi(A^*)=\Phi(A)-1\). 为了研究 \(\varphi\) 而不是 \(\Phi\), 可以把常数 \(-1\) 正比于 \(a\) 地摊到每个 \(\varphi(a)\) 上, 然后令变化前后对应的 \(\varphi\) 值两两相等. 化简后得到:

\[2\varphi(a)=\varphi(a-1)+\varphi(a+1)+\frac{s-1}{s-a}. \]

这个还是比较好算. 引入差分 \(\delta(a)=\varphi(a)-\varphi(a-1)\), 则:

\[\delta(a+1)=\delta(a)-\frac{s-1}{s-a},\delta(0)=0. \]

我们得到了递推势能的方法. 对于终结状态 \(A_t=\{s\}\),

\[\Phi(A_t)=\varphi(s)=-\sum_{i=1}^s\sum_{j<i}\frac{s-1}{s-j}=-\sum_{j=1}^ss-1=-s(s-1). \]

最终 \(\Phi(A_0)-\Phi(A_t)\) 就是答案了. 线性求逆元可以做到 \(\mathcal O(n+m)\).

  对于势能法奏效的数理基础, 可以参考 21 年论文《鞅与一类关于停时的概率与期望问题》.

 

  法二 更加机械化的做法. 还是设 \(s=\sum a_i\), 令 \(f(x)\) 表示最初有 \(x\) 个球拥有被钦定的最终颜色时, 所有球都变成这一颜色的期望时刻 (钦定失败则令时刻为 \(0\)), 那么

\[f(x)=\begin{cases} 0 & x=0\lor x=s\\ \frac{x(x-1)+(s-x)(s-x-1)}{s(s-1)}f(x)+\frac{x(s-x)}{s(s-1)}(f(x-1)+f(x+1))+1, & \text{otherwise} \end{cases}. \]

然后和法一一样初等地算一算就行.

\(\mathscr{C}\sim\) 最小生成树

  给定 \(\{a_n\}\) 和边集 \(E=\{(u,v,w)_m\}\), 进行 \(q\) 次修改, 每次令 \(a_x\gets y\), 随后求出 \(G=([0..n],E\cup\{(0,i,a_i)\}_{i=1}^n)\) 的 MST 边权和.

  \(n,m,q\le3\times10^5\).


  Tags:「A.图论-生成树」「B.Tricks」

  在 \(E\) 中加入足量 \(+\infty\) 边使其能让 \(G\) 连通. 取 \(E\) 构成的 MST, 维护出 Kruskal 算法的等效链 (树转链, 两个图上 Kruskal 的表现相同).

  现在只需要对于链求答案. 线段树维护区间上一个 \(f(0/1,0/1)\) 信息, 表示区间左侧连通块是否与 \(0\) 连通, 右侧连通块是否与 \(0\) 连通, 此时的最小代价. \(\mathcal O((n+m)\log (n+m)+q\log n)\).

posted @ 2022-07-21 20:47  Rainybunny  阅读(89)  评论(1编辑  收藏  举报