zoukankan      html  css  js  c++  java
  • CF280C Game on Tree

    题意

    给出一棵树,每次随机等概率选择一未染黑的点,将它及其子树染黑。问期望多少次操作可以将树全部染黑。

    思路

    题目要求求出的相当于每次随机删除一颗子树,问删除掉整棵树的期望次数
    由于期望的线性性质,可以考虑求出每个点被删除的期望代价,再求和即可得出答案,每个点被删除的期望代价=能删除这个点的每种方法的代价之和 除以 总的方法数
    然后由于删除一个点要么删它本身,要么删它的祖先,所以总共有点的深度种方法,只有在刚好删除这个点的时候才会产生1的代价
    所以答案就是

    [ans=sum_{i}frac{1}{dep_i} ]

    代码

    #include <cstdio>
    #include <algorithm>
    #include <cstring>
    using namespace std;
    int n,v[200100],fir[200100],nxt[200100],cnt;
    double ans=0;
    void addedge(int ui,int vi){
        ++cnt;
        v[cnt]=vi;
        nxt[cnt]=fir[ui];
        fir[ui]=cnt;
    }
    void dfs(int u,int f,int d){
        ans=ans+(1.0/d);
        for(int i=fir[u];i;i=nxt[i])
            if(v[i]!=f)
                dfs(v[i],u,d+1);
    }
    int main(){
        scanf("%d",&n);
        for(int i=1;i<n;i++){
            int a,b;
            scanf("%d %d",&a,&b);
            addedge(a,b);
            addedge(b,a);
        }
        dfs(1,0,1);
        printf("%.20lf
    ",ans);
        return 0;
    }
    
  • 相关阅读:
    10.23
    四则运算(1)
    10.12
    10.22
    今日总结
    Java自学
    Java自学
    Java自学
    Java自学
    Java自学
  • 原文地址:https://www.cnblogs.com/dreagonm/p/10600764.html
Copyright © 2011-2022 走看看