著名的電子產品品牌 shoi 剛剛發布了引領世界潮流的下一代電子產品——概率充電器:
「採用全新奈米級加工技術,實現元件與導線能否通電完全由真隨機數決定!shoi 概率充電器,您生活不可或缺的必需品!能充上電嗎?現在就試試看吧!」
shoi 概率充電器由 n-1 條導線連通了 n 個充電元件。進行充電時,每條導線是否可以導電以概率決定,每乙個充電元件自身是否直接進行充電也由概率決定。
隨後電能可以從直接充電的元件經過通電的導線使得其他充電元件進行間接充電。
作為 shoi 公司的忠實客戶,你無法抑制自己購買 shoi 產品的衝動。在排了乙個星期的長隊之後終於入手了最新型號的 shoi 概率充電器。
你迫不及待地將 shoi 概率充電器插入電源——這時你突然想知道,進入充電狀態的元件個數的期望是多少呢?
對於 100%的資料,n≤500000,0≤p,qi≤100。
吐槽一下這麼神奇的充電器有誰會買啊
最近模板題做的有點多,傻了
首先要知道期望是線性可加的,具體說就是p(
ax+b
y)=a
∗p(x
)+b∗
p(y)
p (a
x+by
)=a∗
p(x)
+b∗p
(y
),這個可以意會一下。那麼題目就變成求每個點通電的概率和了
接著想到算通電要求和,可以反過來求不通電的情況,這樣就只用做乘法。
設f[i]表示i斷電時以i為根的兒子對i的貢獻,h[i]為節點i對i的父親的貢獻,顯然有f[
i]=(
1−q[
i])∗
∏j∈s
on[i
]h[j
] f[i
]=(1
−q[i
])∗∏
j∈so
n[i]
h[j]
,也即是i的每乙個兒子都要斷電或者自己斷電, 以及h
[i]=
f[i]
+(1−
f[i]
)∗(1
−p(i
,fa)
) h[i
]=f[
i]+(
1−f[
i])∗
(1−p
(i,f
a)
),代表i斷電或者連向父親的邊斷電,dfs一次求解
當然還有父親對i的影響,那麼設g[i]表示i的父親對i的貢獻,tm
p=g[
fa]∗
f[fa
]h[i
] tmp
=g[f
a]∗f
[fa]
h[i]
則有g[
i]=t
mp+(
1−tm
p)∗(
1−p(
i,fa
))g [i
]=tm
p+(1
−tmp
)∗(1
−p(i
,fa)
)這裡tmp代表父親除去i這棵子樹的斷電概率,這樣就不會算重。g[i]就是父親斷電或者連向父親的邊斷電
這題dfs爆棧,考慮求拓撲序隨便搞
#include
#include
#include
#define rep(i,st,ed) for (int i=st;i<=ed;++i)
#define drp(i,st,ed) for (int i=st;i>=ed;--i)
#define fill(x,t) memset(x,t,sizeof(x))
const
int eps=0.00001;
const
int n=500005;
const
int e=1000005;
struct edgee[e];
std:: queue
que;
double f[n],g[n],h[n],p[n],q[n];
int ls[n],fa[n],q[n],edcnt=0;
bool vis[n];
int read()
void addedge(int x,int y,double w) ; ls[x]=edcnt;
e[++edcnt]=(edge); ls[y]=edcnt;
}void bfs(int root) }}
}void dfs1()
}}void dfs2()
}}int main(void)
rep(i,1,n) q[i]=read()*0.01;
bfs(1);
dfs1(); g[1]=1; dfs2();
double ans=0;
rep(i,1,n) ans+=1-f[i]*g[i];
printf("%.6lf\n", ans);
return
0;}
BZOJ 3566 SHOI2014 概率充電器
題目 題意 給定樹形結構的n個元件,每個元件有一定概率自己充電,還有一定概率通過某條邊給其他元件充電,求充電的元件期望個數。n 500000 題解 樹形結構肯定能想到樹形dp,全樹對某點產生的貢獻一般可以通過一到兩遍樹形dp計算得出,本題所求期望等於每個元件被充電的概率之和。設f i 表示i被充電的...
bzoj3566 SHOI2014 概率充電器
n個充電器連成一棵樹。第i個充電器有p i 的概率直接充電。每條導線有一定機率可以導電。可以導電的導線形成的聯通塊中只要存在直接充電的結點整個聯通塊的充電器均進入充電狀態。問期望進入充電狀態的充電器個數 顯然可知我們只需要得到f i 表示i進入充電狀態的概率 那麼a ns f i 我們把無根樹變有根...
BZOJ3566 SHOI2014 概率充電器
bzoj luogu 很顯然的兩遍樹dp吧。設 f i 表示只考慮 i 的子樹,i 點沒有電的概率。f i q i prod f v 1 f v 1 p e 為了方便表示把後面那一坨記為 h v 即 h i f i 1 f i 1 p e 然後再記乙個 g i 表示 i 的父親不向 i 供電的概率,...