洛谷题单指南-概率与统计-CF280C Game on Tree

原题链接:https://www.luogu.com.cn/problem/CF280C

题意解读:删除一棵树所有节点需要的操作次数期望。

解题思路:

树中的节点删除是1次,不删除是0次,一个节点删除的条件是这个节点到根节点任意节点删除,一共有depth个(节点的深度),因此删除一个节点的概率为1/depth,求所有节点的深度,倒数求和即可。

100分代码:

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

const int N = 100005;
vector<int> g[N];
int depth[N];
int n;

void dfs(int u, int p, int d)
{
    depth[u] = d;
    for(auto v : g[u])
    {
        if(v == p) continue;
        dfs(v, u, d + 1);
    }
}

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

    dfs(1, 0, 1);
    double ans = 0;
    for(int i = 1; i <= n; i++) ans += 1.0 / depth[i];
    printf("%.6lf", ans);

    return 0;
}

 

posted @ 2026-01-05 15:16  hackerchef  阅读(7)  评论(0)    收藏  举报