做题记录 25.2.19
\(\textcolor{purple}\odot\) AT_agc052_b [AGC052B] Tree Edges XOR
建立一个虚点作为根,\(1\) 连向虚点,边权先不确定
对于原树和目标树,分别令点权为该点到根的路径上的边权异或和
则操作边 \((i,fa_i)\) 等价于交换 \(i\) 和 \(fa_i\) 的点权
显然两树相等等价于点权构成的可重集相等
原树和目标树 \(1\) 到虚点的边权为 \(0\) 的情况下,算出 \(bg_i\) 和 \(ed_i\) 分别表示原树和目标树上的点权
则原问题有解等价于存在非负整数 \(x\),使得 \(\{bg_i\oplus x\mid1\le i\le n\}=\{ed_i\mid1\le i\le n\}\)(此处为可重集)
其必要条件为 $\oplus_{i=1}^n(bg_i\oplus x)=\oplus_{i=1}^n ed_i $,由于保证了 \(n\) 为奇数,其等价于 \(x=\oplus_{i=1}^n (bg_i\oplus ed_i)\)
将其带回 \(\{bg_i\oplus x\mid1\le i\le n\}=\{ed_i\mid1\le i\le n\}\) 检验即可
时间复杂度 \(O(n\log n)\),瓶颈在于排序
\(\textcolor{purple}\odot\) AT_agc060_c [AGC060C] Large Heap
\(U\) 为 \(1\) 向左走 \(a\) 步到达的点,\(V\) 为 \(1\) 向右走 \(b\) 步到达的点
由于均匀性,只保留 \(O(U-1-V)\) 的链的情况下答案不变
考虑从小到大填链上的数,父亲填好才能填儿子,等价于从根出发,每次左侧延伸一步或右侧延伸一步
令 \(f_{i,j}\) 表示目前左侧已经走了 \(i\) 步,右侧将要走第 \(j\) 步,前一步走了左侧,从起点到达该状态的概率
则 \(f_{1,1}=\frac 12\)(第一步有两种可能)
答案为 \(\sum_{i=1}^b f_{a,i}\)(左侧先到达)
令 \(sz_i\) 表示堆中到根的距离为 \(i\) 的节点所在子树中点的数量,容易 \(O(n)\) 递推
则从 \(f_{i,j}\) 对应状态出发,走左侧和走右侧的概率之比为 \(sz_{i+1}:sz_j\)
若向左,则转移到 \(f_{i+1,j}\)
若向右,则左侧已经走了 \(i\) 步,右侧已经走了 \(j\) 步,但左右大小和上述相反,因此交换左右,此时左侧已经走了 \(j\) 步,右侧将要走第 \(i+1\) 步,转移到 \(f_{j,i+1}\)
时间复杂度 \(O(n^2\log p)\),可以通过线性求 \(n\) 个任意数逆元优化到 \(O(n^2)\)(假定 \(O(\log p)<O(n)\)),空间也可优化到 \(O(n)\)