2219C. Coloring a Red Black Tree

  • 每个节点初始为红色或黑色。
  • 每次选择某个 node aa,均匀随机选择 aa 的一个相邻 node bb,将 aa 的颜色变为 bb 的颜色。
  • 求使整棵树染成红色的次数的最小期望。
  • 期望复杂度 O(NlogN)O(N \log N)

状态:

  • fu,0f_{u, 0}:以节点 uu 为根的子树,父节点未染,完成目标所需次数的最小期望。
  • fu,1f_{u, 1}:以节点 uu 为根的子树,先染父节点,完成目标所需次数的最小期望。

转移:

uu 初始为红,

fu,0=fu,1=cchildren(u)fc,1f_{u, 0} = f_{u, 1} = \sum_{c \in \text{children}(u)} f_{c, 1}

uu 初始为黑,为将节点 uu 染红,设 uukk 个红色邻居,成功概率为 kdeg(u)\dfrac{k}{\operatorname{deg}(u)},期望操作次数是 deg(u)k\dfrac{\operatorname{deg}(u)}{k}

fu,0=minSchildren(u){deg(u)S+cSfc,0+cchildren(u)Sfc,1}f_{u, 0} = \min_{\varnothing \neq S \subset \text{children}(u)} \left\lbrace \frac{\operatorname{deg}(u)}{|S|} + \sum_{c \in S} f_{c, 0} + \sum_{c \in \text{children}(u) \setminus S} f_{c, 1} \right\rbrace

fu,1=minSchildren(u){deg(u)S+1+cSfc,0+cchildren(u)Sfc,1}f_{u, 1} = \min_{S \subset \text{children}(u)} \left\lbrace \frac{\operatorname{deg}(u)}{|S| + 1} + \sum_{c \in S} f_{c, 0} + \sum_{c \in \text{children}(u) \setminus S} f_{c, 1} \right\rbrace

处理方程的后半部分,

cSfc,0+cchildren(u)Sfc,1=cchildren(u)fc,1+cS(fc,0fc,1)\sum_{c \in S} f_{c, 0} + \sum_{c \in \text{children}(u) \setminus S} f_{c, 1} = \sum_{c \in \text{children}(u)} f_{c, 1} + \sum_{c \in S} (f_{c, 0} - f_{c, 1})

若固定 S=i|S| = i,则贪心选取 (fc,0fc,1)(f_{c, 0} - f_{c, 1}) 最小的 ii 个。先排序,然后枚举 S|S| 转移。

当树的根是 XX 时,回答编号为 [L,R][L,R] 的节点的 LCA。

【结论 1】根节点为 1 不变时区间 LCA:等价于区间 [L,R][L,R] 中 DFN 最小值和最大值对应的两个点的 LCA。

【结论 2】根节点为 XX 不变时 U,VU,V 两点的 LCA:是 LCA(X,U)(X, U)、 LCA(X,V)(X, V)、 LCA(U,V)(U, V) 深度较大的。