多校B层冲刺NOIP20211111模拟12

本文通过四个题目详细介绍了概率论在NOIP竞赛中的应用。包括:A题中计算有根树覆盖所有点的期望操作次数,B题求解糖果选择策略确保美味度和美观度均超过一半,C题解决有根树染色限制的最小染色数问题,D题分析Alice和Bob在特殊有根树游戏中均衡策略的数量。通过对每个问题的解析,展示了概率论在解决复杂问题时的重要作用。

题面:PDFhttp://xn--gwt928b.accoders.com/pdf/10248/10248.pdficon-default.png?t=LA92http://xn--gwt928b.accoders.com/pdf/10248/10248.pdf

A

给定一棵 n 个点的有根树,节点编号为 1~n,根节点为 1。你会不停地重复 以下操作,直到所有点被覆盖为止:等概率随机树上的一个未被覆盖的点,并 覆盖这个点到根路径上的所有点。请问你的期望操作次数是多少?为了避免高 精度运算,你只需要输出答案对 998244353 取模后的结果。

概率期望经典入门题,根据期望的线性性,答案就是每个点被选到的期望之和,每个点的贡献为一,所以只需要求每个点被选到的概率即可,每个点必须在它的子树中的点被选之前选,所以概率是\frac{1}{size_i}

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

const int MOD = 998244353;
const int N = 10000000;

int n, head[N + 50], num, inv[N + 50], siz[N + 50], f[N + 50];

void Read(int &x)
{
	x = 0; int p = 0; char st = getchar();
	while (st < '0' || st > '9') p = (st == '-'), st = getchar();
	while (st >= '0' && st <= '9') x = (x << 1) + (x << 3) + st - '0', st = getchar();
	x = p ? -x : x;
	return; 
}  

struct Node
{
	int next, to;
} edge[N * 2 + 50];

void Addedge(int u, int v)
{
	edge[++num] = (Node){head[u], v};
	head[u] = num;
	return;
}

int main()
{
	Read(n);
	inv[1] = 1;
	for (int i = 2; i <= n; i++) Read(f[i]), inv[i] = 1LL * (MOD - MOD / i) * inv[MOD % i] % MOD;
	for (int i = n; i >= 1; i--) siz[i]++, siz[f[i]] += siz[i];
	int ans = 0; 
	for (int i = 1; i <= n; i++) (ans += inv[siz[i]]) %= M
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lvshu · 绿树

非常感谢您的搭讪

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值