p_b_p_b的博客

博客

Public Round #12 题解

2024-02-25 16:08:26 By p_b_p_b
  • 搬题人
    • 电塔:Wu_Ren
    • 并查集:p_b_p_b, Lynkcat
    • 划分序列:Crysfly
  • 组题人
    • p_b_p_b
  • 题解:部分题解可以见验题人题解

电塔

来源:

首先把 $x_i$ 从小到大排序,不妨假设 $x_i$ 相对大小关系不变,那么只需满足 $x^\prime_{i+1}-x^\prime_i\ge d$。

设 $y_i=x_i-id$,那么只需保证最终 $y_{i+1}\ge y_i$。同时,在这个过程中我们需要保证 $y_i\ge -id$。

由于我们需要保证 $y_i\ge y_1\ge -d$,所以我们先把比 $-d$ 小的 $y_i$ 先提升到 $-d$,然后就不需要考虑下界的限制了。

那么接下来就是有一个数组,每次给某个数加减一,使得最终单调不降,求最小操作数。

考虑设 $f_{i,j}$ 为 $y^\prime_i\le j$ 且前 $i$ 个数已经单调不降的最小花费,$g_{i,j}$ 为 $y^\prime_i=j$ 且前 $i$ 个数已经单调不降的最小花费,那么有 $g_{i,j}=f_{i-1,j}+|y_i-j|$,容易发现我们的 $j$ 只需要取在 $\{y_i\}$ 里出现过的即可,复杂度 $O(n^2)$。

然后发现假如 $(j,g_{i-1,j})$ 这些点是下凸的,$f\leftarrow g$ 相当于前缀最小值,所以 $(j,f_{i-1,j})$ 这些点也是下凸的,然后 $(j,|y_i-j|)$ 也是下凸的,所以 $(j,g_{i,j})$ 也是下凸的。

同时 $(j,f_{i,j})$ 是呈现分段线性函数的样式,具体的,存在 $0=a_0\le a_1\le a_2\le \dots\le a_i$,使得 $f(x)=f_{i,x}$ 在 $[a_j,a_{j+1}]$ 上斜率为 $j-i$,且 $\forall x\ge a_i,f(x)=f(a_i)$。我们尝试用堆维护 $a_1,a_2,\dots,a_i$ 以及 $w=f_{i,a_i}$。那么从 $f_{i-1}$ 转移到 $f_{i}$ 时,假如 $y_i \ge a_{i-1}$,那么直接令 $a_i=y_i$ 即可;假如 $y_i < a_{i-1}$,那么令 $w:=w+a_{i-1}-y_i$,并设置 $a_{i-1}:=y_i,a_i=y_i$ 即可。

复杂度 $O(n\log n)$。

并查集

来源:

考虑每条边对答案的贡献。合并 $A_i,B_i$ 时,如果令 $A_i$ 为 $B_i$ 的父亲,则这条边被走的次数是 $B_i$ 当前连通块向外连的边数。

因此只要确定了边的顺序,那么一定是让度数小的连通块成为度数大的连通块的父亲。

进一步可以发现,如果 $B_i$ 的连通块度数非零,那么把加边的顺序修改为先合并 $B_i$ 的连通块,再连接 $(A_i,B_i)$ ,再按照原顺序合并 $A_i$ 的连通块,一定不劣。

因此不难证明,最优加边顺序一定满足加入的边在任意时刻都是连通的。即存在一个根,每次加边是把儿子和父亲合并,且父亲此时一定已经与根连通。

感性理解一下,最优加边顺序里,儿子的度数应该不会比上面一整个连通块的度数要大。事实上,如若不然,把儿子选为根一定更优。

于是加入一个儿子就是给答案加上总度数,然后给总度数加上儿子的度数减一。

最后只需要把加入儿子的顺序定下来,满足父亲比儿子早加入。这是一个经典的贪心题,可以用并查集加优先队列实现。

复杂度 $O(n^2\log n)$ 。

划分序列

来源:

咕了,见验题人题解

评论

znstz
验题人题解:据说存在 polylog 做法,敬请期待官方题解(。
  • 2024-02-25 16:11:21
  • Reply
oceeff
A题转化后等价于洛谷P4597吧
  • 2024-02-25 19:05:33
  • Reply

发表评论

可以用@mike来提到mike这个用户,mike会被高亮显示。如果你真的想打“@”这个字符,请用“@@”。