第二十二次
A nm K,没 AK
A
每条边的贡献为其任意一个端点的点权,考虑钦定选择点权较小的一个,
将每条边定向,点权大的点连向点权小的点,按拓扑排序删点即可构造出这样的方案。
B
$\texttt{(}=-1,\texttt{)}=1$。
考虑在当前和为 $s$ 的串 $a$ 后接上 $i$ 串,若 $a$ 的任意前缀和 $\ge 0$,则 $i$ 串中前缀和与前缀最小和均为 $-s$ 的位置可以形成 RBS 前缀,
预处理 $s_S$ 表示 $S$ 中的串的和,预处理 $p_i$ 表示 $i$ 串的前缀最小和,
预处理 $o_{i,j}$ 表示 $i$ 串中前缀和与前缀最小和均为 $j$ 的位置个数,
设 $f_{S,0/1}$ 表示填了 $S$ 中的串,填出的串任意前缀和是 / 否 $\ge 0$(是否还能往后接串),
考虑往后填 $i$ 串,则有转移:
$$ \begin{cases} f_{S\cup\{i\},1}\gets\max\{f_{S\cup\{i\},1},f_{S,1}+o_{i,-s_S}\}&s_S+p_i\ge 0\\ f_{S\cup\{i\},0}\gets\max\{f_{S\cup\{i\},0},f_{S,1}+o_{i,-s_S}\}&s_S+p_i<0 \end{cases} $$
D
设 $p_i$ 表示 $i$ 到最近叶子的距离,可以换根 DP 求出。
考虑算点 $u$ 的答案,若 $p_i\le d(u,i)$,则可以用一个农民封锁以 $u$ 为根 $i$ 子树内所有叶子,
注意到以 $u$ 为根时 $p_i\le d(u,i)$ 的 $i$ 形成若干子树,所以只需封锁这些子树的根,$u$ 的答案即为子树个数。
考虑给每个点赋一个权,使得任意子树点权和 $=1$,
此时 $p_i\le d(u,i)$ 的 $i$ 的点权和即为其形成的所有子树的点权和,
而每个子树点权和 $=1$,所以其形成的所有子树的点权和即为其形成的子树个数。
设 $g_i$ 表示 $i$ 的度数,注意到对于任意真子树 $U$,$\sum\limits_{i\in U}g_i=2|U|-1$,则 $\sum\limits_{i\in U}(2-g_i)=1$,给 $i$ 点赋权 $2-g_i$ 即可。
问题变为对每个 $u$ 求出 $p_i\le d(u,i)$ 的 $i$ 的点权和,点分治即可。