2219C. Coloring a Red Black Tree

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

状态:

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

转移:

若 uu 初始为红,

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

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

fu,0=min⁡∅≠S⊂children(u){deg⁡(u)∣S∣+∑c∈Sfc,0+∑c∈children(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=min⁡S⊂children(u){deg⁡(u)∣S∣+1+∑c∈Sfc,0+∑c∈children(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

处理方程的后半部分,

∑c∈Sfc,0+∑c∈children(u)∖Sfc,1=∑c∈children(u)fc,1+∑c∈S(fc,0−fc,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,0−fc,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) 深度较大的。