神题啊!神题(赞叹)

形式化题意

给定一棵 nn 个点的树,第 ii 个点有点权 aia_i。且每个点都有颜色,初始时颜色都为 11,第 ii 个点的颜色是 cic_i

你可以对一个点 xx 进行一次操作:

  1. 计数有多少 vv,满足 vvx1x \to 1 的路径(包含 xx11)上,且 cvxc_v \ne x
    将满足条件的 vv 的个数记作 cntcnt,并使 ans:=ans+cntans := ans + cnt,初始时 ans=0ans = 0
  2. x1x \to 1 路径上的点颜色全部变为 xx

现在知道了第 ii 个点总共被操作 aia_i 次,问如何安排 a\sum a 次操作,使最后 ansans 最大。然后还有 mm 个询问,每次如下:

  • x w 表示将 ax:=ax+wa_x := a_x + w 后的答案。

题解

第一步就是一个比较难的性质的观察:每个点对答案的贡献是相互独立的。这里每个点对答案的贡献是指,它被其它点当做不同颜色计数,被算了几次。

有了这个观察后,可以分别对每个点 xx 算出答案。具体的方法为,假设现在有一个序列 bb,长度为 kk($k = $ xx 的子树大小),有 c1c_1b1b_1c2c_2b2b_2\cdotsckc_kbkb_k
这里序列 bb 就是 xx 子树点集,cx=abxc_{x} = a_{b_x}。然后等同于安排 bb 的顺序,使得最后长度为 c\sum c 的序列中,相邻的不同颜色的元素最大化。

根据一个类似于摩尔投票法的证明,有一个这样的结论,设 T=i=1kci,M=maxi=1kciT = \sum\limits_{i = 1}^k c_i, M = \max\limits_{i = 1}^k c_i:答案是 min{T1,2(TM)}\min\{T - 1, 2(T - M)\}

现在转化完了之后,题目变成了求:

i=1nmin{Ti1,2(TiMi)}\sum\limits_{i = 1}^n \min\{T_i - 1, 2(T_i - M_i)\}

每次询问 x w 变为对 1x1 \to x 链上的点的 TiT_i 增加 ww,再设法改变一下 MiM_i,这就是 O(nq)\mathcal{O}(nq) 暴力。

到这里获得了整整 3030 分的好成绩。接下来再接再厉,考虑优化这个暴力。

又是一步重要的观察:任意时刻,任何被非 11 的颜色染色的结点所形成的联通块,一定是一条直上直下的链

这使得 MiM_i 所代表的颜色,也一定是一条直上直下的链。

这个性质让我们回想起了树点涂色,提示我们可以用 LCT\text{LCT} 解决此题。

同样的,根据上面的式子的分界线,我们将每个边归为重边和轻边,定义为:

  • 重边:若 2TiTfai+12T_i \geqslant T_{fa_i} + 1,则 (i,fai)(i, fa_i) 为重边。
  • 轻边:不满足该边为重边的边。

由于 Tfai=jfai.sonTjT_{fa_i} = \sum\limits_{j \in fa_i.\text{son}} T_j,所以每个点往儿子连的重边显然不会超过 11 个。

一次 ax:=ax+wa_x := a_x + w 影响到的点,一定是 x1x \to 1 上的点,考虑讨论重边在操作后的变化。

假设现在正在 access 中,讨论 (x,fax)(x, fa_x) 这条边的轻重:

  • 如果 (x,fax)(x, fa_x) 操作前是重边,那么一定该边仍是重边,可以轻松用糖水不等式证明。
  • 如果 (x,fax)(x, fa_x) 操作前是轻边,那么有可能 faxfa_x 的原重边改为 (x,fax)(x, fa_x) 这条边;也有可能 faxfa_x 的重边消失,只剩轻边。

综上所述,遇到重边可以直接跳上去,因为这个不会影响答案(TxMxT_x - M_x 不变)。

时间复杂度为跳轻边的次数,类似重链剖分的复杂度分析,单次 access 复杂度是 O(a)\mathcal{O}(\sum a) 的。(每次跳轻链使 TxT_x 翻倍)