kZjPBD.jpg

Codeforces 280C Game on tree (期望线性性)

题目大意:给你一棵树,1号节点是根,每次等概率选择没有被染黑的一个节点染黑其所有子树中的节点,问染黑所有节点的期望次数

 






 

 

然后这个题一样看过去就是期望DP

因为期望的线性性,我们可以分别考虑每一个节点被染黑的期望次数

如果他的某一个祖先被然黑了,那他也会被染黑,也即使他的操作数就是0,所以说,这个点的只有当选他本身的时候,

才会有操作数,其期望为 1/dep[i]

 






 

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 #define N 100010
 4 int n,tot=0,head[N]= {0};
 5 struct Edge
 6 {
 7     int v,nxt;
 8 } E[N<<1];
 9 void add(int u,int v)
10 {
11     E[++tot]=(Edge)
12     {
13         v,head[u]
14     };
15     head[u]=tot;
16 }
17 int dep[N]= {0};
18 void dfs(int u,int fa)
19 {
20     dep[u]=dep[fa]+1;
21     for(int i=head[u]; i; i=E[i].nxt)
22     {
23         int v=E[i].v;
24         if(v==fa)continue;
25         dfs(v,u);
26     }
27 }
28 int main()
29 {
30     scanf("%d",&n);
31     for(int i=1; i<n; i++)
32     {
33         int u,v;
34         scanf("%d%d",&u,&v);
35         add(u,v);
36         add(v,u);
37     }
38     dfs(1,0);
39     double ans=0;
40     for(int i=1; i<=n; i++)ans+=1.0/(double)dep[i];
41     printf("%lf",ans);
42     return 0;
43 }

 

posted @ 2019-06-03 21:44  Through_The_Night  阅读(168)  评论(0编辑  收藏  举报