ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Luogu6630 [ZJOI2020] 传统艺能

2022-02-04 16:33:06  阅读:207  来源: 互联网

标签:Luogu6630 Af 祖先 矩阵 times 区间 tag 艺能 ZJOI2020


有一棵广义线段树,每个节点有一个 \(m\) 值。一开始 tag 数组均为 \(0\),Bob 会执行 \(k\) 次操作,每次操作等概率随机选择区间 \([l, r]\) 并执行 MODIFY(root,1,n,l,r);
最后所有 Node 中满足 tag[Node]=1 的期望数量。
\(n \le 2\times 10^5\)


  看着题解想锤人的题。。。

  很多题解都不讲清状态的设计,以及为什么只要一个 \(3\times3\) 的矩阵,为什么状态可以这么设计,于是自行研究了一个 \(4\times 4\) 的矩阵的做法才明白原因。于是这个题解讲一个比较好理解的方式。

  首先,考虑根据期望的线性性计算答案,计算每个节点最后有 tag 的概率,比较显然的事情就是 tag 只有两种:祖先的 tag(是否存在一个祖先的 tag = 1) 和自己的 tag。接着我们可以只记录这两种 tag,并将每次操作的节点分类:

  • A. 父亲区间和操作区间没有交集:什么也不会发生变化。

  • B. 父亲区间被操作区间包含:祖先的 tag = 1,自己的 tag 不变。

  • 父亲区间和操作区间有交(但是不被包含)

    • C. 自己与操作区间没有交集:自己的 tag |= 祖先的 tag, 祖先的 tag = 0。
    • D. 自己区间被操作区间包含:祖先的 tag = 0, 自己的 tag = 1。
    • E. 自己区间和操作区间有交:祖先的 tag = 自己的 tag = 0。

  然后按照编号 ABCDE 计算方案数。

关于方案数的计算,我们可以发现,单个节点与操作区间 没有交集/被包含/没有被包含但是有交集 的概率是比较好计算的。
那么 \(A,B\) 可以从父亲节点继承过来,\(C\) 就是自己的没有交集的概率-父亲没有交集的概率,\(D\) 就是自己被包含的概率-父亲被包含的概率,最后一个,\(E =1-A-B-C-D\) 即可。

  之后魔幻的事情就来了,大部分题解都直接说维护一个 \(3\times3\) 的矩阵然后搞搞搞搞搞,甚至有的没有讲清状态的定义,令人一脸蒙 B,看了半年(尤其是式子比较复杂,还不如自己推一推,于是我就推了大半天才明白)。

  最朴素直接的想法应该是设 \(f_0, f_1, f_2, f_3\) 表示 祖先和自己 tag 都为 0 、只有自己的 tag = 1、存在一个祖先 tag = 1、自己 tag = 1 并且存在一个祖先 tag = 1 的概率,转移的话可以根据定义以及变化列出以下式子:

\[\left\{ \begin{aligned} f'_0 &= Af_0 + Cf_0 + E(f_0 + f_1 + f_2 + f_3)\\ f'_1 &= Af_1 + C(f_1+f_2+f_3)+D(f_0+f_1+f_2+f_3)\\ f'_2 &= Af_2 + B(f_0 + f_2)\\ f'_3 &= Af_3 + B(f_1 + f_3) \end{aligned} \right. \]

  这个可以直接使用 \(4\times 4\) 的矩阵维护,最后的答案就是 \(f_1+f_3\)。

  代码

  但是为什么很多题解都拿的 \(3\times 3\) 的矩阵呢?

  我们可以注意到,最后的答案就是 \(f_1+f_3\),然后再自己观察一下两个的转移的式子,就可以发现可以将两个式子合并到一起,于是可以直接维护一个 \(3 \times 3\) 的矩阵了。

  具体地,将 \(f_1\) 状态设为 自己的 tag=1,祖先的 tag 任意的概率,其余不变,然后式子大概长这样:

\[\left\{ \begin{aligned} f'_0 &= Af_0 + Cf_0 + E(f_0 + f_1 + f_2)\\ f'_1 &= Af_1 + C(f_1+f_2)+D(f_0+f_1+f_2)\\ f'_2 &= Af_2 + B(f_0 + f_2)\\ \end{aligned} \right. \]

  然后可以使用 \(3\times3\) 的矩阵维护了,也可以根据 \(f_0 + f_1+f_2 = 1\) ,在矩阵中维护两个状态 + 一个单位元。

  因为 \(4\times4\) 的可以直接过,于是 \(3\times 3\) 代码没写,所以如果 \(3\times3\) 的式子有问题可以与我联系。

标签:Luogu6630,Af,祖先,矩阵,times,区间,tag,艺能,ZJOI2020
来源: https://www.cnblogs.com/werner-yin/p/15862977.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有