建完樹後,單獨計算每條邊對答案的貢獻。
貢 獻就
是這條邊
被遍歷的
次數∗這
條邊的權
值貢獻就是這條邊被遍歷的次數*這條邊的權值
貢獻就是這條
邊被遍歷
的次數∗
這條邊的
權值對於一條邊(如 ab邊)來說,端點a和b將這個樹劃分為兩個部分,a部分子樹上的點如果要連線到b部分,必定要經過a-b這條邊,所以某條邊被訪問次數就是兩部分子樹端點之積,所以只需要dfs一遍這個樹就一樣每個點的子節點個數就行了
#include
using
namespace std;
typedef
long
long ll;
const
int maxn=
100005
;const ll mod=
1e9+7;
struct nodee[maxn*2]
;int head[maxn]
,tot;
int n;
void
add(
int u,
int v,
int w)
ll sz[maxn]
;ll dp[maxn]
;void
dfs(
int u,
int fa)
}int a[maxn]
,b[maxn]
,c[maxn]
;int
main()
dfs(1,
0); ll ans =0;
printf
("%lld\n"
,dp[1]
);}
計算兩點間距離
匯入math包 import math 定義點的函式 class point def init self,x 0,y 0 self.x x self.y y def getx self return self.x def gety self return self.y 定義直線函式 class ge...
樹上兩點期望距離
對於樹上的節點 i 設 d i 為 i 的度數,fa 為 i 的父親,sum limits j 為 i 的兒子。假設邊權均為 1 分別考慮兒子到父親 父親到兒子的期望。設 f i 表示兒子 i 到父親的期望距離。可以分為 2 種情況 直接到父親。概率為 dfrac 步數為 1 期望為 dfrac 先...
樹上兩點期望距離
求樹上兩點之間的期望距離。設d i 為i節點的度數。fa i 為i節點的父親。我們對於兩種不同的走法分別考慮。part1 兒子到父親 設此時期望步數為f i 顯然,只會有兩種情況 1.直接一步走到父親。2.先走到自己的兒子,再走回自己,再走到父親。對於情況1.概率為 frac 步數為1,期望為 fr...