CodeForces 643E

来源:互联网 发布:口风琴基础教程软件 编辑:程序博客网 时间:2024/06/11 09:01

求一颗有根树,在任意一条边相互独立,并且有0.5的概率消失的情况下,

树的深度的期望


#include<cstdio>#include<cstring>#include<cmath>#include<cstdlib>#include<iostream>#include<algorithm>#include<queue>using namespace std;const int N=5e5+100;int du[N];double dp[N][110];int T=60;int pre[N];int main(){#ifdef DouBifreopen("in.cpp","r",stdin);#endif // gh546    int q,n;    while(scanf("%d",&q)!=EOF){        n=1;memset(du,0,sizeof(du));        for(int i=0;i<=T;i++)dp[1][i]=1;        while(q--){            int op,v;scanf("%d%d",&op,&v);            if(op==1){                n++;                for(int i=0;i<=T;i++)dp[n][i]=1;                pre[n]=v;                double tmp=dp[v][0];                du[v]++;                dp[v][0]=pow(0.5,du[v]);                int k=1;                while(k<=T&&pre[v]){                    int u=pre[v];                    double tmp1=dp[u][k];                    dp[u][k]/=(0.5+0.5*tmp);                    dp[u][k]*=(0.5+0.5*dp[v][k-1]);                    k++;                    v=u;                    tmp=tmp1;                }            }            else {                double ans=0;//                for(int i=0;i<=n;i++){//                    printf("%lf ",dp[v][i]);//                }printf("\n");                for(int i=1;i<=T;i++){                    ans+=(dp[v][i]-dp[v][i-1])*i;                }                printf("%lf\n",ans);            }        }    }    return 0;}


0 0