QOJ.ac

QOJ

Type: Editorial

Status: Open

Posted by: louyuxuan

Posted at:

Last updated:

Back to Problem

New Editorial for Problem #22841

记 $c_i=\sum[x_j=i]$,一个必要条件是 $d_i\ge c_i$,其中 $d_i$ 为 $i$ 的度数。考虑 $d$ 确定时直径的最大值,手玩一下可以得到是 $n+1-\sum[d_i=1]$。

我们发现其实取到上界的情况是可以构造的:首先当 $c_i>2$ 时取出 $c_i-2$ 个 $0$ 然后将 $c_i\gets2$,令 $S=\sum\max(c_i-2,0)$,则剩下 $n-S$ 个 $c_i\in\{0,1,2\}$,令三者的数量分别为 $n_0,n_1,n_2$,则 $n_1+2n_2=n-S-1,n_0+n_1+n_2=n-S-1$,所以有 $n_0=n_2+1$,没有 $1$ 时我们可以按 $0-2-0-2-\dots-2-0$ 依次排列,然后有 $1$ 的话就插入到这条链中间即可,最后把 $S$ 个 $0$ 挂在原来 $c_i>2$ 的点上,容易说明这样符合条件。

于是现在有 $f(X)=n-1-\sum\max(c_i-2,0)=\sum\min(c_i,2)$,设 $x_i=a_i$ 时 $f(X)=d_0$,考虑将 $d_0$ 调整为 $d$,当 $c_i>2$ 时可以将 $c_i\gets c_i-1$,再令某个 $c_i<2$ 加一来使 $d_0$ 增加 $1$,那么 $d_0<d$ 时就是将所有代价升序排序用上面的方法调整即可。$d_0>d$ 只能通过 $c_i$ 变为 $1$ 或 $0$ 来调整,那么我们需要选择一个点 $t$,将所有需要调整的 $x_i$ 都令 $x_i\gets t$,$c_t=1$ 时需要多调整一次。

设 $s_i=\sum\limits_{a_j=i}2^{b_j},mx_i=\max\limits_{a_j=i}2^{b_j}$,那么 $c_i$ 变为 $1$ 的最小代价为 $s_i-mx_i$,从 $1$ 再变为 $0$ 的代价为 $mx_i$,此时代价是 $2$ 的幂次的用处来了:由于 $a_j=i$ 所以 $b_j$ 不同,于是 $s_i-mx_i<mx_i$,于是可以把所有代价放一起升序排序,然后枚举 $t$ 去掉 $c_t$ 的代价即可,最后可以发现枚举 $t$ 这一步也是不必要的,可以贪心求解。时间复杂度 $\mathcal{O}(n\log n+n\log V)$。

bonus:本题其实可以加强至代价不是 $2$ 的幂次的情况,此时容易通过交换论证得到,对于 $1\rightarrow 0$ 的代价少于 $>2\rightarrow 1$ 的代价的情况,如果只进行 $>2\rightarrow 1$ 而不进行 $1\rightarrow 0$,这样的 $i$ 只有至多一个。另一种情况是相同的,于是也可以做到同样的复杂度。

Comments

No comments yet.