CF280C Game on tree(期望dp)

这道题算是真正意义上人生第一道期望的题?

题目大意:

给定一个n个点的,以1号点为根的树,每一次可以将一个点和它的子树全部染黑,求染黑所有点的期望

QwQ说实话,我对期望这种东西,一点也不理解。。。

根据期望的线性性,计算出每个点比选择的期望次数,然后直接相加

所以得出\(E(x) = \frac{1}{dep[x]}\)

这里之所以是$ \frac{1}{dep[x]}$是因为我们求的期望是每个点把自己及自己子树染黑的概率(而不是靠祖先)

或者换种说法:

整棵树的期望操作次数太大,难以找到方法。这时我们需要突破口。

该如何将大问题转化为小问题呢?我们发现,一棵树是可以分成好几颗子树的,而子树分解的最终状态就是所有的点。那么,我们是不是可以计算出 每个点被染黑的期望操作次数,然后相加就是整棵树的了?答案是当然可以。

这里需要注意的是,对于每个点的操作次数是指的在这个点上的操作。对于每一个点,如果其祖先被染黑了,它自己也会被顺带染黑,而这个对于该点来说是没有进行操作的。所以得出对于点x:\(E(x) = \frac{1}{dep[x]}\)

直接上代码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>

using namespace std;

inline int read()
{
  int x=0,f=1;char ch=getchar();
  while (!isdigit(ch)) {if (ch==‘-‘) f=-1;ch=getchar();}
  while (isdigit(ch)) {x=(x<<1)+(x<<3)+ch-‘0‘;ch=getchar();}
  return x*f;
}

const int maxn = 1e5+1e2;
const int maxm = 2e5+1e2;

int point[maxn],nxt[maxm],to[maxm];
double dep[maxn];
int vis[maxn];
int n,m;
int cnt;

void addedge(int x,int y)
{
    nxt[++cnt]=point[x];
    to[cnt]=y;
    point[x]=cnt;
}

void dfs(int x,double dp)
{
    dep[x]=dp;
    vis[x]=1;
    for (int i=point[x];i;i=nxt[i])
    {
        int p = to[i];
        if (!vis[p])
        {
            dfs(p,dp+1.0);
        }
    }
}

double ans=0;

int main()
{
  scanf("%d",&n);
  for (int i=1;i<n;i++)
  {
    int x,y;
    x=read(),y=read();
    addedge(x,y);
    addedge(y,x);
  }
  //cout<<"gg"<<endl;
  dep[1]=1;
  dfs(1,1.0);
  for (int i=1;i<=n;i++)
  {
    ans=ans+1.0/dep[i];
  }
  printf("%.8lf",ans);
  return 0;
}

原文地址:https://www.cnblogs.com/yimmortal/p/10160822.html

时间: 2024-10-05 02:24:15

CF280C Game on tree(期望dp)的相关文章

CF280C Game on Tree (期望)

CF280C Game on Tree 期望的确是个玄学(原因可能是我太弱了) 还是不太会呢. 题意:期望多少次操作可以将树全部染黑 话说这个题求概率呢. 因为期望的线性性质,一棵树可以分解为多棵子树,而子树分解的最终状态就是点,所以我们可以计算每个点的期望操作次数再求和,这里的每个点的操作次数是指在这个点上操作. 因为在操作之前不能被染黑,并且必须要染黑. 所以期望次数为\(\sum_{i=1}^n1/dep[i]\) #include <iostream> #include <cst

Codeforces.280C.Game on Tree(期望)

题目链接 参考:浅谈期望的线性性(可加性) Codeforces 280C Game on Tree 概率dp 树上随机删子树 求删完次数的期望(这个的前半部分分析并没有看..) \(Description\) 给你一棵有\(n\)个白点的有根树,每次随机选择一个点,将它和它的子树中所有点染黑. 问期望操作多少次后所有点都被染黑? \(Solution\) 期望好玄啊..(好吧是我太弱) 因为概率具有可加性,一棵树可以分解为多棵子树,而子树分解的最终状态就是点,所以我们可以计算每个点的期望操作次

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)表

概率 &amp;&amp; 期望 DP 入门

~待填坑~ 先来了解一点儿概率和期望的基本知识: 样本空间.事件和概率 样本空间:样本空间 $S$ 是一个集合,它的元素成为基本事件.样本空间的一个子集被称为事件,根据定义,所有基本事件互斥. 概率:如果有一种事件到实数的映射满足 $P()$,满足: 1.对任何事件,$P(A)>=0$ 2.$P(S)=1$ 3.对两个互斥事件,$P(A\cap B)=P(A)+P(B)$ 则可称$P(A)$为事件$A$的概率.上述三条成为概率公理. 事件的关系与运算 包含:对于事件$A$与事件$B$,如果事件$

【bzoj4872】[Shoi2017]分手是祝愿 数论+期望dp

题目描述 Zeit und Raum trennen dich und mich. 时空将你我分开. B 君在玩一个游戏,这个游戏由 n 个灯和 n 个开关组成,给定这 n 个灯的初始状态,下标为从 1 到 n 的正整数.每个灯有两个状态亮和灭,我们用 1 来表示这个灯是亮的,用 0 表示这个灯是灭的,游戏的目标是使所有灯都灭掉.但是当操作第 i 个开关时,所有编号为 i 的约数(包括 1 和 i)的灯的状态都会被改变,即从亮变成灭,或者是从灭变成亮.B 君发现这个游戏很难,于是想到了这样的一个

HDOJ 1145 So you want to be a 2n-aire? 期望DP

期望DP So you want to be a 2n-aire? Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 267    Accepted Submission(s): 197 Problem Description The player starts with a prize of $1, and is asked a seq

HDU 4336 Card Collector (期望DP+状态压缩 或者 状态压缩+容斥)

题意:有N(1<=N<=20)张卡片,每包中含有这些卡片的概率,每包至多一张卡片,可能没有卡片.求需要买多少包才能拿到所以的N张卡片,求次数的期望. 析:期望DP,是很容易看出来的,然后由于得到每张卡片的状态不知道,所以用状态压缩,dp[i] 表示这个状态时,要全部收齐卡片的期望. 由于有可能是什么也没有,所以我们要特殊判断一下.然后就和剩下的就简单了. 另一个方法就是状态压缩+容斥,同样每个状态表示收集的状态,由于每张卡都是独立,所以,每个卡片的期望就是1.0/p,然后要做的就是要去重,既然

Topcoder SRM656div1 250 ( 期望DP )

Problem Statement    Charlie has N pancakes. He wants to serve some of them for breakfast. We will number the pancakes 0 through N-1. For each i, pancake i has width i+1 and deliciousness d[i].Charlie chooses the pancakes he is going to serve using t

期望dp 知识点

求期望dp有两种类型 1.概率dp 2.高斯消元 相关知识点可以看这里  一篇很好的文章  http://kicd.blog.163.com/blog/static/126961911200910168335852/ http://www.cnblogs.com/kuangbin/archive/2012/10/02/2710606.html 高斯消元  http://wenku.baidu.com/link?url=Q8ES7wreJk3et-VrHtp6CVNuyqX18YdB3c841-o

hdu 4863 Centroid of a Tree 树dp

代码来自baka.. #include<iostream> #include<cstdio> #include<cstring> #include<string> #include<algorithm> #include<map> #include<queue> #include<stack> #include<set> #include<cmath> #include<vecto