【数学期望】【LCA】【树形DP】树
樹
題目大意
給你一棵有n個節點的樹,以及m個詢問,每個詢問需要你回答一個點到另一個點要經過的期望邊數
輸入樣例
4 2 1 2 2 3 3 4 1 4 3 4輸出樣例
9 5數據范圍
對于 20%20\%20%的數據,N?10.N \leqslant 10.N?10.
對于 40%40\%40%的數據,N?1000.N \leqslant 1000.N?1000.
另有 20%20\%20%的數據, 保證給定的樹是一條鏈.
對于 100%100\%100%的數據, N?100000,Q?100000.N \leqslant 100000, Q \leqslant 100000.N?100000,Q?100000.
解題思路
樹上兩點之間的距離要先求lcalcalca,然后可以通過前綴和來得出兩點到lcalcalca距離
對于前綴和我們要先得出某個點到父親節點和兒子節點的期望距離
我們設
degxdeg_xdegx?為點xxx的度數
dp1xdp1_xdp1x?為點xxx到父親節點的期望距離
dp2xdp2_xdp2x?為點xxx的父親節點到點x的期望距離
我們先算dp1dp1dp1
葉子結點到父親節點的期望距離為1,因為只能往上
對于不是葉子結點的點xxx
它直接到父親節點的期望是1degx\frac{1}{deg_x}degx?1?(1degx\frac{1}{deg_x}degx?1?的概率走這條邊)
他到子節點i再回來再到父親節點的期望是1+dp1i+dp1xdegx\frac{1+dp1_i+dp1_x}{deg_x}degx?1+dp1i?+dp1x??
所以可以得到以下式子
dp1x=1degx+∑i∈sonx1+dp1i+dp1xdegxdp1_x=\frac{1}{deg_x}+\sum_{i\in son_x}\frac{1+dp1_i+dp1_x}{deg_x}dp1x?=degx?1?+i∈sonx?∑?degx?1+dp1i?+dp1x??
化簡式子
dp1x=1degx+degx?1degx+(degx?1)dp1xdegx+∑i∈sonxdp1idegxdp1_x=\frac{1}{deg_x}+\frac{deg_x-1}{deg_x} + \frac{(deg_x-1)dp1_x}{deg_x} + \sum_{i\in son_x}\frac{dp1_i}{deg_x}dp1x?=degx?1?+degx?degx??1?+degx?(degx??1)dp1x??+i∈sonx?∑?degx?dp1i??
移項
dp1xdegxdegx?(degx?1)dp1xdegx=1degx+degx?1degx+∑i∈sonxdp1idegx\frac{dp1_x deg_x}{deg_x}-\frac{(deg_x-1)dp1_x}{deg_x}=\frac{1}{deg_x}+\frac{deg_x-1}{deg_x} + \sum_{i\in son_x}\frac{dp1_i}{deg_x}degx?dp1x?degx???degx?(degx??1)dp1x??=degx?1?+degx?degx??1?+i∈sonx?∑?degx?dp1i??
化簡
dp1xdegx=1degx+degx?1degx+∑i∈sonxdp1idegx\frac{dp1_x}{deg_x}=\frac{1}{deg_x}+\frac{deg_x-1}{deg_x} + \sum_{i\in son_x}\frac{dp1_i}{deg_x}degx?dp1x??=degx?1?+degx?degx??1?+i∈sonx?∑?degx?dp1i??
同乘degxdeg_xdegx?
dp1x=degx+∑i∈sonxdp1idp1_x=deg_x+ \sum_{i\in son_x}dp1_idp1x?=degx?+i∈sonx?∑?dp1i?
求出dp1后我們來求dp2
父親節點直接到目標子節點的期望是1degfa\frac{1}{deg_{fa}}degfa?1?
父親節點先到父親節點的父親節點然后回來再到目標子節點的期望是1+dp2fa+dp2xdegfa\frac{1+dp2_{fa}+dp2_x}{deg_{fa}}degfa?1+dp2fa?+dp2x??
父親節點先到其他子節點再回來再到目標子節點的期望是1+dp1i+dp2xdegfa\frac{1+dp1_i+dp2_x}{deg_{fa}}degfa?1+dp1i?+dp2x??
所以我們得到式子
dp2x=1degfa+1+dp2fa+dp2xdegfa+∑i∈sonfa∣i≠x1+dp1i+dp2xdegfadp2_x=\frac{1}{deg_{fa}} + \frac{1+dp2_{fa}+dp2_x}{deg_{fa}}+\sum_{i\in son_{fa}|i\neq x}\frac{1+dp1_i+dp2_x}{deg_{fa}}dp2x?=degfa?1?+degfa?1+dp2fa?+dp2x??+i∈sonfa?∣i?=x∑?degfa?1+dp1i?+dp2x??
化簡式子
dp2x=1degfa+1+dp2fadegfa+dp2xdegfa+degfa?2degfa+(degfa?2)dp2xdegfa+∑i∈sonfa∣i≠xdp1idegfadp2_x=\frac{1}{deg_{fa}} + \frac{1+dp2_{fa}}{deg_{fa}} + \frac{dp2_x}{deg{fa}}+\frac{deg_{fa}-2}{deg_{fa}}+\frac{(deg_{fa}-2)dp2_x}{deg_{fa}}+\sum_{i\in son_{fa}|i\neq x}\frac{dp1_i}{deg_{fa}}dp2x?=degfa?1?+degfa?1+dp2fa??+degfadp2x??+degfa?degfa??2?+degfa?(degfa??2)dp2x??+i∈sonfa?∣i?=x∑?degfa?dp1i??
移項
dp2xdegfadegfa?dp2xdegfa?(degfa?2)dp2xdegfa=1degfa+1+dp2fadegfa+degfa?2degfa+∑i∈sonfa∣i≠xdp1idegfa\frac{dp2_x deg_{fa}}{deg{fa}} - \frac{dp2_x}{deg{fa}} - \frac{(deg_{fa}-2)dp2_x}{deg_{fa}}=\frac{1}{deg_{fa}} + \frac{1+dp2_{fa}}{deg_{fa}} +\frac{deg_{fa}-2}{deg_{fa}}+\sum_{i\in son_{fa}|i\neq x}\frac{dp1_i}{deg_{fa}}degfadp2x?degfa???degfadp2x???degfa?(degfa??2)dp2x??=degfa?1?+degfa?1+dp2fa??+degfa?degfa??2?+i∈sonfa?∣i?=x∑?degfa?dp1i??
合并
dp2xdegfa=1degfa+1+dp2fadegfa+degfa?2degfa+∑i∈sonfa∣i≠xdp1idegfa\frac{dp2_x}{deg{fa}}=\frac{1}{deg_{fa}} + \frac{1+dp2_{fa}}{deg_{fa}} +\frac{deg_{fa}-2}{deg_{fa}}+\sum_{i\in son_{fa}|i\neq x}\frac{dp1_i}{deg_{fa}}degfadp2x??=degfa?1?+degfa?1+dp2fa??+degfa?degfa??2?+i∈sonfa?∣i?=x∑?degfa?dp1i??
同乘degfadeg_{fa}degfa?
dp2x=dp2fa+degfa+∑i∈sonfa∣i≠xdp1idp2_x=dp2_{fa} +deg_{fa}+\sum_{i\in son_{fa}|i\neq x}dp1_idp2x?=dp2fa?+degfa?+i∈sonfa?∣i?=x∑?dp1i?
根據dp1xdp1_xdp1x?的式子化簡該式子
∵degfa+∑i∈sonfa∣i≠xdp1i=degfa+∑i∈sonfadp1i?dp1x=dp1fa?dp1x∴dp2x=dp2fa+dp1fa?dp1x\begin{aligned} \because deg_{fa}+\sum_{i\in son_{fa}|i\neq x}dp1_i & =deg_{fa}+\sum_{i\in son_{fa}}dp1_i-dp1_x \\ & =dp1_{fa}-dp1_x\end{aligned} \\ \therefore dp2_x=dp2_{fa} +dp1_{fa}-dp1_x∵degfa?+i∈sonfa?∣i?=x∑?dp1i??=degfa?+i∈sonfa?∑?dp1i??dp1x?=dp1fa??dp1x??∴dp2x?=dp2fa?+dp1fa??dp1x?
然后求前綴和,再求lcalcalca
然后求aaa到lcalcalca再到bbb的期望步數即可
總結
以上是生活随笔為你收集整理的【数学期望】【LCA】【树形DP】树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 趋势科技云安全软件怎么清理垃圾
- 下一篇: 【数学】异或