专栏文章

题解:XXYX Binary Tree

AT_arc157_e题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@mio079wx
此快照首次捕获于
2025/12/02 11:13
3 个月前
此快照最后确认于
2025/12/02 11:13
3 个月前
查看原文
写完这道题,跑了 372 ms。发现有一个跑了 12 ms 的,点进去一看,是 Θ(N)\Theta(N) 做法。那么我们就来解释一下 kostia244 老师的做法。
  假设树是 Γ=(V,E)\Gamma = (V, E),以 rr 为根,有分划 XY=VX \sqcup Y = V,且 YY 是一个独立集。假设 LL 是全体叶子。我们可以直接通过式计算出 B,CB, C
B=Y[rY],C=2YL.B = |Y| - [r \in Y], C = 2 \cdot \left\lvert Y \cap L^\complement\right\rvert.
  假设 rXr \in X。每一个 xYLx \in Y \cap L^\complement 会强制其所有子节点 X\in X。那么我们为了给出 BB 的贡献,所强制的节点数是
f=vYL(v 作为叶子的子结点数).f = \sum_{v \in Y \cap L^\complement} (v\ \text{作为叶子的子结点数}).
后文记这个 vv 作为叶子的子结点数为 (v)\ell(v)。那么我们希望 BC2B - \dfrac C2 个叶子属于 YY,因此希望 f+BC2Lf + B - \dfrac C2 \le |L|。如果 rYr \in Y,可以类似推理。
  因此,我们的问题形式变为,求一个独立集 SLS \subseteq L^\complement,满足 S=K|S| = K
vS(v)\sum_{v \in S} \ell(v)
最小。这个最小值我们记作 w(K)w(K)。处理其的一个方法是 Lagrange 松弛。由于如果我们直接放宽 S=K|S| = K 的限制最小值会变成 00,所以我们考虑每选一个会使值额外减少 λ\lambda,也就是我们最小化 (v)λ\ell(v) - \lambda 的和,这时的问题记作 F(λ)F(\lambda)
  现在我们说明,λ\lambda 有用的取值只会有 [0,4][0, 4]。这是因为:λ<0\lambda < 0 肯定还不如不选;而对于一个独立集 SS,如果存在一个比 SS 的元素个数更大的独立集,我们一定能够通过如下两种操作得到一个:
  • 添加一个元素 xxSS 中;
  • xSx \in S,设其两个儿子为 l,rl, r,从 SS 中删去 xx 并添加 l,rl, r
  无论哪种,答案的变化量不会超过 44。这样,你 (v)λ\ell(v) - \lambda 至少可以把 4-4 的变化量变成 00。假设最优解 F(λ)F^*(\lambda)KK 值为 K(λ)K^*(\lambda),通过下述凸性,可以证明,w(K)w(K) 可以通过:选取 λ\lambda 使得 K(λ)KK^*(\lambda) \ge Kλ\lambda 最小,则 w(K)=F(λ)λKw(K) = F^*(\lambda) - \lambda \cdot K
  下面,我们还要证明,ww 是凸的。我们采用线性规划的方法:对于每个点,赋实数 xu[0,1]x_u \in [0, 1]。要求对于每一个 (u,v)E(u, v) \in Exu+xv1x_u + x_v \le 1。并考虑 (v)xv\ell(v) x_v 的求和。由 Birkhoff 定理得,有一个最大值满足 xk{0,1}x_k \in \{0, 1\}。于是我们得到了一个线性规划问题:
P:minimizexRV0x1xu+xv1 (uvE)x=KvVxvcost(v).P : \operatorname*{minimize}\limits_{\substack{x \in \mathbb R^V \\ 0 \le x \le 1\\x_u + x_v \le 1\ (uv \in E)\\\sum x = K}}\sum_{v {\in V}} x_v \cdot \mathrm{cost}(v).
  我们可以得到这样的对偶问题。
P:maximizev,λcost(v)+yv?+svy0,s0,λRKλeEyevVsv.P^\vee : \operatorname*{maximize}\limits_{\substack{\forall v, \lambda \le \mathrm{cost}(v) + \sum y_{v?} + s_v \\ y \ge 0, s \ge 0, \lambda \in \mathbb R}} K \lambda - \sum_{e \in E} y_e - \sum_{v \in V} s_v.
  ss 取非 00 值对线性规划的限制紧,还会使欲最大化的值变小,因此毫无意义。取 s=0s = 0。则由于 PP 可行且有界,w(K)=val(P)=val(P)w(K) = \mathrm{val}(P) = \mathrm{val}(P^\vee)(强对偶定理)。可以发现 KλK \lambda 一看就很像我们刚才提到的 Lagrange 松弛,因此考虑固定 λ\lambda 看盛夏的最优化问题。考虑对内层问题 II 作对偶(由于式过多略去),可以直观地感受到可行域恰好就是 xRV,0x1,xu+xv1 (uvE)x \in \mathbb R^V , 0 \le x \le 1, x_u + x_v \le 1\ (uv \in E)(记为 HH)。同时这个问题的权值可以通过计算得出等于
minxHvV(cost(v)λ)xv.\min_{x \in H} \sum_{v \in V} (\mathrm{cost}(v) - \lambda) x_v.
  与 Lagrange 松弛恰好等价!
  因此
w(K)=maxλR(F(λ)λK),w(K) = \max_{\lambda \in \mathbb R} (F^*(\lambda) - \lambda K),
也就是一族关于 KK 的一次函数的 max\max,是凸的。这下,我们一并解决了为什么 ww 是凸的,为什么 Lagrange 松弛是对的这两个问题。
  上文提到,选取 λ\lambda 使得 K(λ)KK^*(\lambda) \ge Kλ\lambda 最小,则 w(K)=F(λ)λKw(K) = F^*(\lambda) - \lambda \cdot K。这根据上面的式子也是好解释的。而且 0λ40 \le \lambda \le 4 使得我们只需要计算 F(λ)F^*(\lambda) 五次。而每一次我们都可以简单地用树形 DP 计算。
  至此,我们得到了一个时间复杂度为 Θ(N)\Theta(N) 的算法。
  参考代码可以看 kostia 的,有一些包括但不限于 λλ\lambda \leftrightarrow -\lambda 的小差距。

评论

0 条评论,欢迎与作者交流。

正在加载评论...