CF280C Game on Tree

Posted lovewhy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF280C Game on Tree相关的知识,希望对你有一定的参考价值。

题面:https://www.luogu.org/problemnew/show/CF280C

 

//Pro:CF280C Game on Tree

//因为树全被染成黑色了,所以根节点一定被染了
//那么就是求从x染到根节点的操作数的期望 
//考虑x被染黑的情况 
//1、根节点(x的最高祖先)被染黑
//2、根节点的某个儿子(x的次高祖先)被染黑
//......
//dep[x]-1、x的父亲被染黑
//dep[x]、 x被染黑
//所以节点x被染黑的可能情况有dep[x]种
//用P(x)表示直接把x染黑的概率
//那么P(x)=1/dep[x]
//所以我们要算的就是sigma(1/dep[x])

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;

const int N=1e5+5;

int n;
int head[N],num_edge;
struct Edge
{
    int v,nxt;
}edge[N<<1];

inline void add_edge(int u,int v)
{
    edge[++num_edge].v=v;
    edge[num_edge].nxt=head[u];
    head[u]=num_edge;
}

int dep[N];
void dfs(int u,int fa)
{
    for(int i=head[u],v;i;i=edge[i].nxt)
    {
        v=edge[i].v;
        if(v==fa)
            continue;
        dep[v]=dep[u]+1;
        dfs(v,u);
    }
}

double ans;
int main()
{
    scanf("%d",&n);
    for(int i=1,u,v;i<n;++i)
    {
        scanf("%d%d",&u,&v);
        add_edge(u,v);
        add_edge(v,u);
    }
    dep[1]=1;
    dfs(1,0);
    for(int i=1;i<=n;++i)
        ans+=1.0/dep[i];
    printf("%.7lf",ans);
    return 0;
}

 

以上是关于CF280C Game on Tree的主要内容,如果未能解决你的问题,请参考以下文章

CF280C Game on tree(期望dp)

Codeforces 280C Game on Tree 期望

Codeforces 280C - Game on Tree

题解CF#172(Div. 1) C.Game on Tree

codeforces 220 C. Game on Tree

[AGC017D]Game on Tree