一棵有根树,每条边都有0.5个概率消失,
问根能到达的最深深度值的期望,
定义:dp[i][j]为以i为跟深度<=j的概率,
#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
const int N=5e5+100;
int pre[N];
double dp[N][66];
int main(){
#ifdef DouBi
freopen("in.cpp","r",stdin);
#endif // DouBi
int q;
int ed=60;
while(scanf("%d",&q)!=EOF){
int tot=1;
pre[1]=0;
for(int i=0;i<=ed;i++){
dp[1][i]=1;
}
while(q--){
int a,b;scanf("%d%d",&a,&b);
if(a==1){
tot++;
pre[tot]=b;
for(int i=0;i<=ed;i++){
dp[tot][i]=1;
}
double tmp=dp[b][0];
dp[b][0]*=0.5;
int u=pre[b],v=b,l=1;
while(l<=ed&&u){
double tmp1=dp[u][l];
dp[u][l]/=(0.5+0.5*tmp);
dp[u][l]*=(0.5+0.5*dp[v][l-1]);
tmp=tmp1;
l++;
v=u;
u=pre[u];
}
}
else {
double ans=0;
// for(int i=0;i<=3;i++){
// printf("%lf ",dp[b][i]);
// }printf("\n");
for(int i=1;i<=ed;i++){
ans+=(dp[b][i]-dp[b][i-1])*i;
}
printf("%.10lf\n",ans);
}
}
}
return 0;
}
探讨一棵有根树中,每条边以0.5概率消失时,从根节点出发能达到的最大深度的期望值计算问题。使用动态规划方法,定义dp[i][j]为以i为根且深度不超过j的概率。
281

被折叠的 条评论
为什么被折叠?



