令 \(f_{u,i}\) 表示子树 \(u\) 内选择 \(i\) 个黑点的方案数
设要把 \(v\) 并入 \(u\),原本的 \(f_u\) 记为 \(f\),\(f_v\) 记为 \(g\),合并后的 \(f_u\) 记为 \(h\),则转移为
\[h_x\gets\min_{a+b=x}(f_a+g_b+|2b-k|)
\]
保存 \(f_{u,\ast}\) 的差分数组 \(f'_{u,\ast}\),则 \(g_b\gets g_b+|2b-k|\) 等价于 \(g'_0\gets g'_0+k\),\(g'_{1\sim \lfloor\frac k2\rfloor}\) 减去 \(2\),\(g'_{\lceil\frac k2\rceil+1\sim sz(v)}\) 加上 \(2\)
每个 \(f_{u,\ast}\) 用两个可并堆维护,一个保存前 \(\frac k2\) 个值,一个保存剩余值
时间复杂度 \(O(n\log n)\)
代码
参考
存在相同的 \(a\) 时显然行列式为 \(0\)
交换一对 \(a_i,a_j\mid i\ne j\) 显然不改变行列式的值,因此可以任意重排 \(a\),假定按 \(\text{dfs}\) 序排列
令 \(f_u\) 表示取 \(a\) 在子树 \(u\) 内的区间计算出的行列式的值
考虑加入一个儿子 \(v\) 后对 \(f\) 的影响
用 \((v)_{a\times b}\) 表示大小为 \(a\times b\) 的全 \(v\) 矩阵,用 \(M_{[a,b]}\) 表示矩阵 \(M\) 第 \(a\) 至 \(b\) 行的部分,空白表示这部分为 \(0\)
设加入 \(v\) 前 \(f_u\) 对应的方阵为 \(A_{x\times x}\),\(v\) 对应方阵为 \(D_{y\times y}\),令 \(p\) 为结点 \(u\) 的权值,则加入 \(v\) 后的矩阵为 \(\begin{bmatrix}A&(p)_{x\times y}\\(p)_{y\times x}&D\end{bmatrix}\)
显然
\[\begin{aligned}
&\det \begin{bmatrix}A&(p)_{x\times y}\\(p)_{y\times x}&D\end{bmatrix}\\
=&\det \begin{bmatrix}A&(p)_{x\times y}\\(p)_{(y-1)\times x}&D_{[1,y-1]}\\(p)_{1\times x}&D_{[y,y]}\end{bmatrix}\\
=&\det \begin{bmatrix}A&(p)_{x\times y}\\(p)_{(y-1)\times x}&D_{[1,y-1]}\\&D_{[y,y]}-(p)_{1\times y}\end{bmatrix}
+\det \begin{bmatrix}A&(p)_{x\times y}\\(p)_{(y-1)\times x}&D_{[1,y-1]}\\(p)_{1\times x}&(p)_{1\times y}\end{bmatrix}\\
\end{aligned}
\]
第二个
\[\begin{aligned}
&\det \begin{bmatrix}A&(p)_{x\times y}\\(p)_{(y-1)\times x}&D_{[1,y-1]}\\(p)_{1\times x}&(p)_{1\times y}\end{bmatrix}\\
=&\det \begin{bmatrix}
A_{[1,1]}&(p)_{1\times y}\\
A_{[2,2]}&(p)_{1\times y}\\
\vdots&\vdots\\
A_{[x,x]}&(p)_{1\times y}\\
(p)_{1\times x}&D_{[1,1]}\\
(p)_{1\times x}&D_{[2,2]}\\
\vdots&\vdots\\
(p)_{1\times x}&D_{[y-1,y-1]}\\
(p)_{1\times x}&(p)_{1\times y}\end{bmatrix}\\
=&\det \begin{bmatrix}
A_{[1,1]}-(p)_{1\times x}&\\
A_{[2,2]}-(p)_{1\times x}&\\
\vdots&\\
A_{[x,x]}-(p)_{1\times x}&\\
&D_{[1,1]}-(p)_{1\times y}\\
&D_{[2,2]}-(p)_{1\times y}\\
&\vdots\\
&D_{[y-1,y-1]}-(p)_{1\times y}\\
(p)_{1\times x}&(p)_{1\times y}\end{bmatrix}\\
=&\det \begin{bmatrix}
A-(p)_{x\times x}&\\
&D_{[1,y-1]}-(p)_{(y-1)\times y}\\
(p)_{1\times x}&(p)_{1\times y}\end{bmatrix}\\
=&p\det \begin{bmatrix}
A-(p)_{x\times x}&\\
&D_{[1,y-1]}-(p)_{(y-1)\times y}\\
(1)_{1\times x}&(1)_{1\times y}\end{bmatrix}\\
=&p\det \begin{bmatrix}
A-(p)_{x\times x}&\\
&D_{[1,y-1]}-(p)_{(y-1)\times y}\\
&(1)_{1\times y}\end{bmatrix}\\
\end{aligned}
\]
第一个
\[\begin{aligned}
&\det \begin{bmatrix}A&(p)_{x\times y}\\(p)_{(y-1)\times x}&D_{[1,y-1]}\\&D_{[y,y]}-(p)_{1\times y}\end{bmatrix}\\
=&\det \begin{bmatrix}A&(p)_{x\times y}\\
(p)_{(y-2)\times x}&D_{[1,y-2]}\\
(p)_{1\times x}&D_{[y-1,y-1]}\\
&D_{[y,y]}-(p)_{1\times y}
\end{bmatrix}\\
=&\det \begin{bmatrix}A&(p)_{x\times y}\\
(p)_{(y-2)\times x}&D_{[1,y-2]}\\
&D_{[y-1,y-1]}-(p)_{1\times y}\\
&D_{[y,y]}-(p)_{1\times y}
\end{bmatrix}
+\det \begin{bmatrix}A&(p)_{x\times y}\\
(p)_{(y-2)\times x}&D_{[1,y-2]}\\
(p)_{1\times x}&(p)_{1\times y}\\
&D_{[y,y]}-(p)_{1\times y}
\end{bmatrix}\\
=&\det \begin{bmatrix}A&(p)_{x\times y}\\
(p)_{(y-2)\times x}&D_{[1,y-2]}\\
&D_{[y-1,y]}-(p)_{2\times y}\\
\end{bmatrix}
+p\det \begin{bmatrix}A-(p)_{x\times x}&\\
&D_{[1,y-2]}-(p)_{(y-2)\times y}\\
&(1)_{1\times y}\\
&D_{[y,y]}-(p)_{1\times y}
\end{bmatrix}\\
\end{aligned}
\]
从而最初的
\[\begin{aligned}
&\det \begin{bmatrix}A&(p)_{x\times y}\\(p)_{y\times x}&D\end{bmatrix}\\
=&\det \begin{bmatrix}A&(p)_{x\times y}\\
(p)_{(y-2)\times x}&D_{[1,y-2]}\\
&D_{[y-1,y]}-(p)_{2\times y}\\
\end{bmatrix}
+p\det \begin{bmatrix}A-(p)_{x\times x}&\\
&D_{[1,y-2]}-(p)_{(y-2)\times y}\\
(1)_{1\times x}&(1)_{1\times y}\\
&D_{[y,y]}-(p)_{1\times y}
\end{bmatrix}
+p\det \begin{bmatrix}
A-(p)_{x\times x}&\\
&D_{[1,y-1]}-(p)_{(y-1)\times y}\\
&(1)_{1\times y}\end{bmatrix}\\
=&\cdots\\
=&\det \begin{bmatrix}A&(p)_{x\times y}\\
&D-(p)_{y\times y}\\
\end{bmatrix}
+p\sum_{i=1}^y
\det \begin{bmatrix}A-(p)_{x\times x}&\\
&D_{[1,i-1]}-(p)_{(i-1)\times y}\\
&(1)_{1\times y}\\
&D_{[i+1,y]}-(p)_{y-i\times y}
\end{bmatrix}\\
=&\det A \det(D-(p)_{y\times y})
+p
\det(A-(p)_{x\times x})
\sum_{i=1}^y\det \begin{bmatrix}
D_{[1,i-1]}-(p)_{(i-1)\times y}\\
(1)_{1\times y}\\
D_{[i+1,y]}-(p)_{y-i\times y}
\end{bmatrix}\\
\end{aligned}
\]
令 \(g_u\) 表示 \(f_u\) 对应行列式中将一行替换为 \(1\),所有 \(sz_u\) 种可能得到的行列式的值之和
则加入一个 \(v\) 时,先将子树 \(v\) 内所有点的权值减去 \(p\),算出 \(f_v,g_v\),然后 \(f_u\gets f_u\times f_v+pg_vF,g_u\gets g_u f_v+Fg_v\),其中 \(F\) 为之前所有 \(f_v\) 之积
特殊处理一下 \(u\) 本身的贡献即可
时间复杂度 \(O(n)\)
代码
参考
令两种操作代价减半,变成 \(1\) 和 \(3\),最终答案乘以 \(2\) 即可
对于一个确定的序列,令 \(f_{i,j}\) 表示到第 \(i\) 个点位置,覆盖前面所有点,代价为 \(j\),向后还能延伸的长度的最大值,转移是容易的
对于一个 \(i\),令 \(x\) 表示覆盖至 \(i\) 的最小代价,显然只有 \(x,f_{i,x},f_{i,x+1},f_{i,x+2}\) 有用,在 \(dp\) 过程中动态统计 \(x\) 的总贡献,并把 \((f_{i,x},f_{i,x+1},f_{i,x+2})\) 记为一个状态
令 \(f_{i,(a,b,c)}\) 表示前 \(i\) 个达到状态 \((a,b,c)\) 的方案数,初始 \(f_{0,(0,0,0)}=1\)
对于 \(f_{i-1,(a,b,c)}\),令 \(v=f_{i-1,(a,b,c)}\) 为方案数,令 \(a,b,c\) 都减去 \(t_i-t_{i-1}\) 然后对 \(0\) 取 \(\max\),然后 \(b\gets \max(b,a+20),c\gets \max(c,b+20)\),令 \(d\gets \max(c+20,a+75)\)
若删去当前点,则 \(f_{i,a,b,c}\) 加上 \(v\)
若不删去,若 \(a>0\) 则最小值不变,\(f_{i,a,b,c}\) 再加上 \(v\),否则最小值加一,将 \(v\times 2^{n-i}\) 计入答案,然后 \(f_{i,b,c,d}\) 加上 \(v\)
总时间复杂度 \(O(nv^3)\),其中 \(v=75\),常数极小
代码
参考
令 \(\text{dis}(i,j)\) 表示环上的距离
从外向内枚举所有给定的边,令 \(f_u\) 表示目前为止走到 \(u\) 所需额外增加的最小边数,初始 \(f_i=\text{dis}(i,s)\),设目前加入的边连接 \((x,y)\mid y=x\bmod n+1\),则交换 \(f_x,f_y\),并对于 \(x,y\),分别更新和向外更新
更新本身时,\(f_x\gets \min(f_x,f_i+\text{dis}(i,x))\),实际上由于除了 \(f_x,f_y\) 外任意 \(i,j\) 满足 \(|f_i-f_j|\le \text{dis}(i,j)\),因此假设从 \(x\) 在环上的对面处断开环,对于 \(x\) 左侧的 \(i\),必有 \(f_i+\text{dis}(i,x)\ge f_{x-1}+\text{dis}(x-1,x)=f_{x-1}+1\),右侧同理,即只需要取 \(x\) 在环上左右两个位置更新之即可,\(y\) 同理
向外更新时 \(f_i\gets \min(f_i,f_x+\text{dis}(i,x))\),\(y\) 同理
向外更新可以拆分为区间 \(f_i\) 对 \(i-v\) 取 \(\min\) 和对 \(i+v\) 取 \(\min\),线段树维护即可
总时间复杂度 \(O(n+m\log n)\)
代码
参考