參考:【樹形期望dp】[shoi2014]概率充電器%%%
由 \(n-1\) 條導線連通了 \(n\) 個元件。這 \(n-1\) 條導線每條都有 \(p\) 的概率能夠導電,而每個元件本身有 \(q_i\) 的概率被直接充電。電能可以從直接充電的元件經過通電的導線使得其他充電元件進行間接充電。問期望有多少個元件處於充電狀態?
設編號為 \(i\) 的元件被充電的概率為 \(p_i\),設共有 \(x\) 個元件處於充電狀態。
我們要求的 \(e(x)\) 就是 \(\sum_^n p_i\)
因為 \(n-1\) 條導線連通了 \(n\) 個元件,所以這 \(n\) 個充電元件構成一棵樹。任取乙個節點作為數根。顯然元件 \(i\) 通電有三種可能:
它自己來電了
它的孩子裡有乙個點來電了傳了過來
它的父親來電了傳了過來
第一種情況的概率就是 \(q_i\),第二種情況的概率明顯可以用遞推來解。至於第三種情況……後面再說
用 \(f_i\) 表示當前元件僅僅因為直接充電或由孩子供電的概率。
對於樹中葉子節點 \(i\),它沒有孩子,所以\(f_i=q_i\)。
對於非葉子節點 \(i\),\(f_i=q_i + \sum_(i)} f_j\cdot p_j\)
嗎?不對!
對於兩個相互獨立的事件\(a\)、\(b\),
\[\boxed}
\]
這其實是「容斥原理」所以,上面的加法都要換為概率和。方便起見,我把數字 \(a\) 和 \(b\) 的「概率和」記為 \(a\cup b=a+b-ab\),把集合 \(a\) 中所有元素的「概率和」記為 \(\bigcup_ i\)
所以 \(f_i = q_i \cup \bigcup_(i)} f_j\cdot p_j\)
這樣,我們就可以求出每個元素的 \(f\) 了。寫成表示式就是
\[f_i = \begin
q_i&,\ i \text \\
q_i \cup \bigcup_(i)} f_j\cdot p_j& \text
\end
\]現在把由父親充電的情況加進來!
最簡單的是根節點。對於根節點 \(i\),它沒有父親,所以 \(p_i=f_i\)
對於其他的節點 \(i\),它有個父親 \(\textit\),遞推式為 \(p_i=f_i\cup p_}\cdot p\)
這樣,再從根節點向葉子節點進行一次遍歷,就可以把每個節點的充電概率算出來了。
#include#include#include#include#include#include#define eps (1e-8)
using namespace std;
const int maxn=500000+50;
struct node ;
vectore[maxn];
double q[maxn],f[maxn],p[maxn],ans;
void addedge(int a,int b,double p) );
}bool dcmp(double a)
void dfs1(int u,int fa)
}}void dfs2(int u,int fa)
dfs2(to,u);}}
}void init()
for (int i=1;i<=n;i++)
}void solve()
int main()
SHOI 2014 概率充電器 題解
題目傳送門 題目大意 給出一棵樹,第 i ii 個節點有 a ia i ai 的概率有電,第 i ii 條邊有 e ie i ei 的概率導電,問期望有幾個節點有電。很經典的 dpdp dp套路,第一次 dpdp dp求出 f i f i f i 表示子樹對 i ii 的貢獻,也就是只看子樹的情況下...
概率充電器(shoi2014)
出處 輾轉山河弋流歌 by 空灰冰魂 著名的電子產品品牌 shoi 剛剛發布了引領世界潮流的下一代電子產品 概率充電器 採用全新奈米級加工技術,實現元件與導線能否通電完全由真隨機數決定!shoi 概率充電器,您生活不可或缺的必需品!能充上電嗎?現在就試試看 吧!shoi 概率充電器由 n 1 條導線...
SHOI2014 概率充電器
採用全新奈米級加工技術,實現元件與導線能否通電完全由真隨機數決 定!shoi 概率充電器,您生活不可或缺的必需品!能充上電嗎?現在就試試看 吧!shoi 概率充電器由n 1 條導線連通了n 個充電元件。進行充電時,每條導 線是否可以導電以概率決定,每乙個充電元件自身是否直接進行充電也由概率 決定。隨...