【刷题笔记】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}\)

posted @ 2025-07-12 17:44  GuoSN0410  阅读(7)  评论(0)    收藏  举报