第二十九次

sto SoyTony orz

A

子树 $u$ 内重心一定在其重儿子子树内重心 $v$ 到 $u$ 的路径上,

于是每次从 $v$ 往上暴力跳找到子树 $u$ 内重心,注意到每条边最多被经过一次,所以复杂度线性。

B

枚举矩阵的列区间 $[l,r]$,拿出每行的这个区间形成序列 $\{s_n\}$,

定义 $s_i=s_j$,当且仅当它们可以重排为相同的串,

则问题变为求 $s$ 有多少回文子区间 $[x,y]$,满足其中每个串都可以重排为回文串。

预处理 $z_{i,j}$ 表示 $a_{i,[1,j]}$ 中出现奇数次的字符集合,则 $s_i$ 可以重排为回文串当且仅当 $|z_{i,r}\oplus z_{i,l-1}|\le 1$。

$\forall c\in\Sigma$ 赋随机权 $o_c$,预处理 $h_{i,j}=\sum\limits_{k=1}^ja_{i,k}$,则 $s_i$ 与 $s_j$ 可以重排为相同的串当且仅当 $h_{i,r}-h_{i,l-1}=h_{j,r}-h_{j,l-1}$。

哈希二分统计回文子区间即可。

C

求出钦定这 $k$ 条边存在的最小生成树 $T$,此时若非树边 $u\overset w{\to}v$ 存在,则 $T$ 上 $u\to v$ 路径上每条边都应 $\le w$,

可并堆维护树链 check min 即可。

D

sto SoyTony orz

对行 $x<y<z$,列 $l<r$,从 $(x,l)$ 到 $(z,r)$ 有三种移动方式:

  • $(x,l)\to(x,r)\to(y,r)$,代价 $(r-l)a_x+(z-x)b_r$。
  • $(x,l)\to(z,l)\to(z,r)$,代价 $(z-x)b_l+(r-l)a_z$。
  • $(x,l)\to(y,l)\to(y,r)\to(z,r)$,代价 $(y-x)b_l+(r-l)a_y+(z-y)b_r$。

考虑啥时候 $y$ 有用,第三种方案最优时有 $\dfrac{a_y-a_x}{y-x}<\dfrac{b_r-b_l}{r-l}<\dfrac{a_z-a_y}{z-y}$,即有用的 $a,b$ 斜率单调增,维护下凸壳。

考虑每次向下还是向右,向右更优时有 $\dfrac{b_r-b_l}{r-l}<\dfrac{a_z-a_x}{z-x}$,于是每次会选斜率较小的方向,维护两个指针扫描两个凸包即可。

posted @ 2023-08-24 21:48  5k_sync_closer  阅读(3)  评论(0编辑  收藏  举报  来源