2018.09.09 codeforces280C. Game on Tree(期望dp)

传送门
期望dp经典题。
显然只需要算出每个点被染黑的期望步数。
点i被染黑的期望是 1/(1i) 1 / ( 1 到 i 这 条 链 上 的 节 点 数 )
于是就做完了。
代码:

#include
#define N 100005
using namespace std;
inline int read(){
    int ans=0;
    char ch=getchar();
    while(!isdigit(ch))ch=getchar();
    while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
    return ans;
}
int first[N],n,cnt,dep[N];
double ans=0;
struct edge{int v,next;}e[N<<1];
inline void add(int u,int v){e[++cnt].v=v,e[cnt].next=first[u],first[u]=cnt;}
inline void dfs(int p,int fa){
    for(int i=first[p];i;i=e[i].next){
        int v=e[i].v;
        if(v==fa)continue;
        dep[v]=dep[p]+1,dfs(v,p);
    }
}
int main(){
    n=read();
    for(int i=1;iint u=read(),v=read();
        add(u,v),add(v,u);
    }
    dep[1]=1,dfs(1,1);
    for(int i=1;i<=n;++i)ans+=1.0/(1.0*dep[i]);
    printf("%.20lf",ans);
    return 0;
}

你可能感兴趣的:(#,dp,#,期望dp,dp专题,dp)