C - Large Heap Editorial by satashun


ユーザー解説です.

条件付き確率を考えて,ヒープ的かつ\(P_U<P_V\) となる確率を求めます.

\(P_U < P_V\) の制約がない場合は,各頂点について部分木のサイズで割っていく(ある集合で最小となる確率)と求まります.集合同士は互いに含まれるか,交差が空かのどちらかです.

これから \(P_U<P_V\) の条件を考慮します.まず \(U, V\) パス上の頂点の中での順位を決めたとします.この場合も,ある集合で最小,という条件の組み合わせとみなすことができ,制約のない場合同様,集合のサイズで割っていくことで求まります.

よって,dp[根から\(U\)のパスの\(i\)番目まで決めた][根から\(V\)のパスの\(j\)番目まで決めた] と変数を取ると漸化式が立ちます.

逆元を毎回計算すると,時間計算量は \(\mathrm{O}(N^2 \log mod)\) となります.( \(\mathrm{O}(N^2)\) に高速化可能です)

posted:
last update: