1. 程式人生 > >【概率與期望】【組合計數】TopCoder SRM 561 Orienteering

【概率與期望】【組合計數】TopCoder SRM 561 Orienteering

題意:

給出一顆樹,樹上有些選中點 C C ,現在隨機從中選擇一個大小為 k k 的子集 S

S ,計算出一條包含所有 S S 中的點的最短路徑 P P ,求 P
P
的期望長度。

點數 N 2500 , k C

300 N\le2500,k\le |C|\le 300


分析:

每個 S S 中的點在路徑 P P 第一次被訪問的順序為:
v 0 , v 1 , v 2 v S 1 v_0,v_1,v_2……v_{|S|-1}

性質1:

顯然,路徑 P P 的起點必為 v 0 v_0 ,終點必為 v S 1 v_{|S|-1}
並且, P P 是由 ( v 0 > v 1 ) , ( v 1 > v 2 ) , ( v 3 > v 4 ) ( v S 2 > v S 1 ) (v_0->v_1),(v_1->v_2),(v_3->v_4)……(v_{|S|-2}->v_{|S|-1}) 組成。其中 ( u > v ) (u->v) 表示從u到v的最短路徑。
證明:因為是第一次出現的順序,所以若不是最短路徑,則最短路徑一定更優。

性質2:

對於任意一條邊 e e ,其出現在 P P 中的充要條件為: e e 分開的兩個聯通塊中,均有點 x S x\in S
證明略。

性質3:

對於任意一條邊 e P e\in P ,其最多出現2次。
證明略。

性質4:

對於任意一條邊 e P e\in P ,其出現一次的充要條件為: e ( v 0 > v S 1 ) e\in(v_0->v_{|S|-1})
證明:如果把這條路徑連上,則形成了一條迴路,迴路中每條邊都一定訪問2次。由性質1可得,這條迴路從 v S 1 v_{|S|-1} 回到 v 0 v_0 的過程中,一定走的是最短路。現在把這條 ( v S 1 > v 0 ) (v_{|S|-1}->v_0) 路徑刪去,這條路徑上的邊就只走了一次。

現在,有了這麼一堆性質,很容易發現:對於一個固定的 S S (隨機出來的大小為k的 C C 的子集),其最短路徑 P P 的長度為: 2 × E s p a t h ( a > b ) 2\times |E_s|-path(a->b)
其中 E s E_s 是一定存在於路徑 P P 上的邊的集合(即滿足性質2的邊的集合)。
p a t h ( a > b ) path(a->b) 是從 a a b b 的最短路。

E s |E_s| 是固定的,因此要使得 p a t h ( a > b ) path(a->b) 儘可能大,即 ( a , b ) (a,b) S S 中的最遠點對。

根據期望的性質,對於這兩個部分,可以分開考慮其期望貢獻。(即分別算出 E ( E s ) E(|E_s|) E ( p a t h ( a > b ) ) E({path(a->b)})

計算 E ( E s ) E(|E_s|)

顯然要考慮算每條邊的貢獻。

E ( E s ) = p e 1.0 E(|E_s|)=\sum p_e*1.0 p e p_e e E s e\in E_s 的概率)

考慮 e e 兩側的聯通塊 A A , B B

顯然