洛谷题单指南-概率与统计-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;
}
浙公网安备 33010602011771号