題目用圖論的語言來敘述就是:乙個起初沒有邊的圖,不斷隨機選擇未直接相連的兩點連邊直到圖連通,求連邊的期望。
p[n][m]表示加m條邊使得n個點連通的概率。那麼p[n][m]-p[n][m-1]就表示加了m-1條邊圖尚未連通,加了第m條邊後圖連通的概率。那麼顯然需要加邊的期望值是
σ(p[n][m]-p[n][m-1])*m
要使得n個點的圖連通,至少需要n-1條邊,至多需要c(n-1,2)+1條邊(即n-1個點兩兩相連形成完全圖,再用一條邊與剩下的乙個點連線,其中c(n,m)表示n個中選m個的組合數)。這就是上式m的取值範圍。
現在問題變成如何計算p[n][m]。
正面計算p[n][m]比較困難,我們通過減去反面(即加了m條邊,n個點不連通的概率)來計算。
既然圖不是連通的,必然任意乙個連通分量包含的點數小於n。不妨考慮編號為1的點所在的連通分量,假設有n1個點,m1條邊。為了組建這個連通分量,首先選出除1外的n1-1個點,有c(n-1,n1-1)種方法。之後連m1條邊,這有c(e1,m1)種方法,其中e1=c(n1,2)是可選的邊數。在這所有的連邊方法中要保證連完之後這n1個點是連通的,這恰好就是p[n1][m1]的意義,乘以這個數就得到了,到這裡這個連通分量組建完成。對於剩下的m-m1條邊,我們只要不連到上述連通分量就行了,也就是在剩下的n-n1個點之間連。方法數是c(c(n-n1,2),m-m1)。將這些數相乘就得到方法數,
counts[n1][m1]= c(n-1,n1-1)*c(e1,m1)*p[n1][m1]* c(c(n-n1,2),m-m1)
總的方法數是total=c(c(n,2),m),求概率counts[n1][m1]/total
上面計算的是1所在的連通分量有n1個點,m1條邊的情況,我們需要列舉n1,m1。
下面是zzz---的**
[cpp]view plain
copy
#include
#include
#include
#include
using namespace std;
double a[451][451];
double c(int n,int k)
double p[31][451],ans[31];
class repairrode
} double pre=0;
if(j>0)
pre=p[i][j-1];
ans[i]+=j*(p[i][j]-pre);
} }
return ans[n];
} };
模擬賽 修路 題解 kruskal
問題描述 在 b 國裡,有 n 個城市,每個城市有乙個發達程度 a i b 要修建一些道路,修建這條道路的花費為 cost i 把這些城市連起來,使得任意 2 個城市之間,有 且只有 1 條路相聯通。最後這些道路建成時,每個城市對 b 國的經濟會做出貢 獻,貢獻度為 a i i 這個城市它所直接相連...
歡樂技術英雄會
在這個技術喧嘩的時代,網際網路就是江湖。江湖多凶險,但是很公平,只要有才能的人,就能成名,他們就是網際網路上的英雄 有的人天生就是英雄,無論他是否出生在亂世,在和平的年代他們是歡樂的英雄。夫網際網路英雄者,今朝胸懷技術泰斗,腹有安全良謀,有包藏天下軟體之機,吞吐萬難之志。2007技術英雄大會,他們將...
歡樂技術英雄會
在這個技術喧嘩的時代,網際網路就是江湖。江湖多凶險,但是很公平,只要有才能的人,就能成名,他們就是網際網路上的英雄 有的人天生就是英雄,無論他是否出生在亂世,在和平的年代他們是歡樂的英雄。夫網際網路英雄者,今朝胸懷技術泰斗,腹有安全良謀,有包藏天下軟體之機,吞吐萬難之志。2007技術英雄大會,他們將...