Codeforces Round #172 (Div. 1) C. Game on Tree(期望的线性性质)

题意是给出一棵有根树,每次等概率删除一个点以及以其为根的子树,问删完整棵树的期望步数。

暴力枚举方案显然不可,考虑期望的线性性质,将问题转化为删除每个点的期望步数再求和。一个点消失要么是选中了这个点的某个祖先(对这个点的期望没有贡献),要么是直接删除这个点。换句话说,一条链上每个点首先被删除的概率是相等的。设这个点的深度为dep,那么删除这个点的概率为1dep,步数为1,对期望的贡献为1dep×1。dfs一遍更新答案即可。

#include <bits/stdc++.h>
#define N 100005
using namespace std;
int n, head[N], ver[2 * N], Next[2 * N], tot = 0;
void add(int x, int y) {
	ver[++tot] = y, Next[tot] = head[x], head[x] = tot;
}
double ans = 0;
void dfs(int x, int pre, int dep) {
	ans += 1.0 / dep;
	for(int i = head[x]; i; i = Next[i]) {
		int y = ver[i];
		if(y == pre) continue;
		dfs(y, x, dep + 1);
	}
} 
int main() {
	cin >> n;
	for(int i = 1; i <= n - 1; i++) {
		int u, v;
		cin >> u >> v;
		add(u, v);
		add(v, u);
	}
	dfs(1, 0, 1);
	cout << fixed << setprecision(8) << ans << endl;
	return 0;
}
posted @   脂环  阅读(53)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
历史上的今天:
2021-11-11 2020CCPC长春 F. Strange Memory(树上启发式合并)
2021-11-11 2020CCPC长春 D. Meaningless Sequence(打表/数位DP)
2020-11-11 AcWing 1224. 交换瓶子(交换最少次数使得数列有序)
2020-11-11 AcWing 1220. 生命之树(树形DP)
点击右上角即可分享
微信分享提示
主题色彩