首页 > 其他 > 详细

[CF280C] Game on Tree - 拆贡献,期望

时间:2021-04-10 00:21:28      阅读:18      评论:0      收藏:0      [点我收藏+]

[CF280C] Game on Tree - 拆贡献,期望

Description

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

Solution

按惯例拆贡献,转化为每个点被染色次数的期望的和

一个点会被染色,当且仅当它的所有祖先没有在它之前被染色

换言之现在有个随机排列,我们问的就是某个元素出现在另外一些元素之前的概率

因此一个点的贡献就是它深度的倒数

#include <bits/stdc++.h>
using namespace std;

#define int long long

const int N = 1000005;
int n;
vector<int> g[N];
int dep[N];

void dfs(int p, int from)
{
    for (int q : g[p])
    {
        if (q == from)
            continue;
        dep[q] = dep[p] + 1;
        dfs(q, p);
    }
}

signed main()
{
    ios::sync_with_stdio(false);

    cin >> n;
    for (int i = 1; i < n; i++)
    {
        int t1, t2;
        cin >> t1 >> t2;
        g[t1].push_back(t2);
        g[t2].push_back(t1);
    }

    dep[1] = 1;
    dfs(1, 0);

    double ans = 0;
    for (int i = 1; i <= n; i++)
        ans += 1.0 / dep[i];

    cout << fixed << setprecision(12) << ans << endl;
}

[CF280C] Game on Tree - 拆贡献,期望

原文:https://www.cnblogs.com/mollnn/p/14638761.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!