題目傳送門
題目大意:給出一張圖,**過後每條邊有乙個存在的概率,問**後圖變樹的概率。
又長見識了……還有個變元矩陣樹定理。
對於圖的一棵生成樹,它的出現概率為:存在的邊的 p[i
]p[i]
p[i]
之積乘不存在的邊的 (1−
p[i]
)(1-p[i])
(1−p[i
])之積。設圖為 g
gg,生成樹為 t
tt,那麼用柿子表示出來就是:∏e∈
tp[e
]×∏e
′∉t(
1−p[
e′])
\prod\limits_ p[e]\times \prod\limits_ (1-p[e'])
e∈t∏p
[e]×
e′
∈t∏
(1−p
[e′]
),轉換一下得到 ∏e∈
tp[e
]1−p
[e]×
∏e′∈
g(1−
p[e′
])
\prod\limits_ \frac \times \prod\limits_ (1-p[e'])
e∈t∏1
−p[e
]p[e
]×e
′∈g∏
(1−
p[e′
])。轉化後,一棵生成樹的出現概率就變成了樹中所有邊的 p[e
]1−p
[e
]\frac
1−p[e]
p[e]
之積在乘上乙個定值 ∏e′
∈g(1
−p[e
′]
)\prod\limits_ (1-p[e'])
e′∈g∏
(1−p
[e′]
) 了,然後所有生成樹出現概率總和就是答案。於是我們就可以將每條邊的邊權定為 p[e
]1−p
[e
]\frac
1−p[e]
p[e]
,然後跑一次變元矩陣樹定理,最後乘上那個定值就是答案了。
**如下:
#include
#include
#include
using
namespace std;
#define maxn 60
#define eps 0.000001
int n;
double f[maxn]
[maxn]
,prod=
1.0;
double
det(
int l)
return re;
}int
main()
printf
("%.5lf"
,det
(n-1
)*prod)
;}
BZOJ3534 SDOI2014 重建 題解
t國有n個城市,用若干雙向道路連線。一對城市之間至多存在一條道路。在一次洪水之後,一些道路受損無法通行。雖然已經有人開始調查道路的損毀情況,但直到現在幾乎沒有訊息傳回。辛運的是,此前t國 調查過每條道路的強度,現在他們希望只利用這些資訊估計災情。具體地,給定每條道路在洪水後仍能通行的概率,請計算仍能...
SDOI2014 數表 解題報告
這題並沒有做出來。設f i d i d 考慮按f i 排序,則對於詢問 n m n m f i 會貢獻 nd d 1 d n id mid 這樣我們按照id考慮即可。但是我做的時候錯誤地把它化成了這樣 nd d 1 d ni d m i d 這樣就很難考慮出來該怎麼做了。include includ...
SDOI2014 向量集(凸包 線段樹)
題目鏈結 兩個操作 1.在序列s中加入乙個向量 2.求某個向量和s的區間 l,r l,r l,r 中向量的點積最大值。n m 105 n,m le 10 5 n,m 10 5考慮兩個向量 a1 b1 a2 b2 a 1,b 1 a 2,b 2 a1 b 1 a2 b2 詢問向量為 x,y x,y x...