這是一道概率+樹形\(dp\)
首先我們看到這裡每乙個的貢獻都是1,所以我們要求的期望就是概率
求得其實就是這個
\[\sum_^np_i
\]\(p_i\)為節點\(i\)通電的概率
顯然節點\(i\)通電有三種可能
它自己來電了
它的子樹裡有乙個點來電了傳了過來
它的子樹外面有乙個點來電了傳了過來
第一種情況最好考慮了,至於第二種和第三種我們好像很難解決的樣子
但是這顯然也告訴了我們這是乙個套路題,第二種和第三種正好就是樹規裡的\(up\)
\(and\)
\(down\)思想
於是我們設\(h[i]\)表示第\(i\)個節點通電的概率,之後我們利用\(up\)
\(and\)
\(down\)思想,在第一遍dfs的過程中,\(h[i]\)表示\(i\)通電的概率,且電一定來自它自己或者它的子樹裡(對應第一第二種情況),在第二遍dfs的時候被更新成為電來自於任何地方的概率(對應所有情況)
最開始初始化,\(h[i]=a[i]*0.01\)電只能來自自己
之後第一遍dfs,樹形dp裡的\(up\),我們要將子樹的資訊合併給根,由於根通電還是有兩種可能
根自己來電了
兒子來電,兒子通向根的邊導電
顯然這兩種情況只需要滿足一種就夠了
但是合併之後的概率是多少呢,直接加起來顯然是不對的而我還真加了起來
我們考慮有兩個事件\(a,b\),發生的概率分別是\(p(a),p(b)\),那麼至少發生一件的概率應該是
\[p(a)+p(b)-p(a)*p(b)
\]這個怎麼推出來的,很簡單,至少發生一件,那麼就有三種可能
\(a\)發生\(b\)不發生,那麼則為\(p(a)*(1-p(b))\)
\(b\)發生\(a\)不發生,那麼則為\(p(b)*(1-p(a))\)
\(a,b\)一起發生,那麼則為\(p(a)*p(b)\)
三項合起來最後一化就是\(p(a)+p(b)-p(a)*p(b)\)
所以我們合併根和子樹的資訊的時候,\(p(a)=h[i],p(b)=h[j]*p(i,j)\),\(i\)是子樹的根,\(j\)是\(i\)的兒子,\(p(i,j)\)是這條邊導電的概率
所以\(h[i]=p(a)+p(b)-p(a)*p(b)\)
之後我們就要考慮\(down\)了,乙個節點有點也有可能來自它的父親,於是我們採用\(down\)的思想用父親更新兒子
顯然我們更新一位父親的某個兒子,顯然我們只能用其他點來電傳到父親的概率來更新這個兒子
於是我們設\(p(b)=h[j]*p(i,j)\),而且有
\[p(a)+p(b)-p(a)*p(b)=h[i]
\]我們要求的是\(p(a)\)即除了\(j\)這棵子樹其他點來電使得\(i\)有電的概率
於是解一下這個方程
\[p(a)-p(a)*p(b)=h[i]-p(b)
\]\[p(a)*(1-p(b))=h[i]-p(b)
\]\[p(a)=\frac
\]而之後我們去更新兒子的話還有一邊是否導電需要考慮,於是
\[h[j]=h[j]+(p(a)*p(i,j))-h[j]*p(a)*p(i,j)
\]之後就沒有啦,同時還有乙個非常坑的地方就是如果\(p(b)=h[j]*p(i,j)=1\)
那麼除以\(1-p(b)\)肯定會出錯,由於\(h[j]\)都已經是1了,顯然沒有什麼必要去更新它了,於是可以直接跳過這一層接著往下更新就好了
#include#include#include#define re register
#define maxn 500005
#define eps 1e-7
struct node
e[maxn<<1];
int num,n,m;
int a[maxn],head[maxn],deep[maxn];
double h[maxn];
double ans;
inline int read()
inline void add_edge(int x,int y,int z)
void dfs(int x)//up
}inline int check(double aa,double bb)
double k=(h[x]-h[e[i].v]*double(e[i].w)/100)/(1-h[e[i].v]*double(e[i].w)/100);
k*=double(e[i].w)/100;
h[e[i].v]=h[e[i].v]+k-k*h[e[i].v];
redfs(e[i].v);
}}int main()
for(re int i=1;i<=n;i++)
a[i]=read(),h[i]=a[i]*0.01;
deep[1]=1;
dfs(1);
redfs(1);
printf("%.6lf",ans);
return 0;
}
概率充電器(shoi2014)
出處 輾轉山河弋流歌 by 空灰冰魂 著名的電子產品品牌 shoi 剛剛發布了引領世界潮流的下一代電子產品 概率充電器 採用全新奈米級加工技術,實現元件與導線能否通電完全由真隨機數決定!shoi 概率充電器,您生活不可或缺的必需品!能充上電嗎?現在就試試看 吧!shoi 概率充電器由 n 1 條導線...
SHOI2014 概率充電器
採用全新奈米級加工技術,實現元件與導線能否通電完全由真隨機數決 定!shoi 概率充電器,您生活不可或缺的必需品!能充上電嗎?現在就試試看 吧!shoi 概率充電器由n 1 條導線連通了n 個充電元件。進行充電時,每條導 線是否可以導電以概率決定,每乙個充電元件自身是否直接進行充電也由概率 決定。隨...
SHOI2014 概率充電器
著名的電子產品品牌 shoi 剛剛發布了引領世界潮流的下一代電子產品 概率充電器 採用全新奈米級加工技術,實現元件與導線能否通電完全由真隨機數決定 shoi 概率充電器,您生活不可或缺的必需品 能充上電嗎?現在就試試看吧 shoi 概率充電器由 n 1 條導線連通了 n 個充電元件。進行充電時,每條...