【刷题笔记】AT_agc060 Large Heap
【刷题笔记】AT_agc060 Large Heap
题解
首先注意到题目给出的排列,十分像一个二叉堆,并且构成这个堆的树,还是棵 满二叉树。
其次再注意到点 \(u\) 和点 \(v\),分别位于这棵树的 左链 和 右链 上。
考虑,如果将这棵树的所有节点按照权值排序,就相当于对整棵树进行了一次 拓扑排序,而要满足 \(p_u<p_v\),就只需要使得在拓扑序中 \(u\) 在 \(v\) 的前面。
考虑 DP。
首先由于点 \(u\) 和点 \(v\),分别位于这棵树的左链和右链上,所以我们只需要考虑从 \(u\to 1 \to v\) 的路径就可以了。
设 \(f_{i,j}\),表示按照点权值 从小到大 走,从左链已经走了 \(i\) 步,从右链走了 \(j\) 步的概率。
初值:\(f_{A,j}(1 \le j < B)=1\)
转移方程
\[f_{i,j}=f_{i-1,j}\times \frac{2^{n - i + 1} - 1}{2^{n - i + 1} + 2^{n - j + 1} - 2} + f_{i,j-1}\times \frac{2^{n - j + 1} - 1}{2^{n - i + 1} + 2^{n - j + 1} - 2}
\]
要把 \(i\) 加入到拓扑序中,需要加入一棵大小为 \(2^{n - i + 1} - 1\) 的子树,同理要把 \(j\) 加入到拓扑序中,需要加入一棵大小为 \(2^{n - j + 1} - 1\) 的子树,所以加入 \(i\) 的概率为 \(\frac{2^{n - i + 1} - 1}{2^{n - i + 1}+2^{n - j + 1} - 2}\),加入 \(j\) 的概率为 \(\frac{2^{n - j + 1} - 1}{2^{n - i + 1}+2^{n - j + 1} - 2}\)。
答案:\(f_{n,n}\)。

浙公网安备 33010602011771号