首页 > 其他分享 >NOIP 备赛:CF 2E 板刷

NOIP 备赛:CF 2E 板刷

时间:2024-11-15 19:07:14浏览次数:1  
标签:dep 板刷 dfrac 备赛 2E int 爱丽丝 dp mod

从 \(2024.11.05\) 之前的比赛排着刷。

CF2028 E

给定一棵树,根为 \(1\)。爱丽丝的起点位于某个顶点 \(v\) 。她想走出洞口,但不幸的是,红心皇后已经下令处死她。

每分钟都会掷一枚公平的硬币。如果硬币是正面,爱丽丝就可以移动到她当前位置的相邻顶点,反之,红心皇后就可以把爱丽丝拉到皇后选择的相邻顶点。如果爱丽丝最终出现在树的非根叶子上,那么爱丽丝就输了。

假设两人都以最佳方式移动,计算爱丽丝成功逃离每个起始顶点 \(1\le v\le n\) 的概率。对 \(998\,244\,353\) 取模的值。\(n \le 10 ^ 5\)。


首先需要一个 key observation,就是 Alice 的最优策略一定是向父亲走,红心皇后的最优策略一定是向深度最小的叶子走。设每个点深度最小的儿子是 \(s_u\),Alice 从这个点出发逃离概率是 \(f_u\)。那么有转移:

\[f(u) = \dfrac{1}{2}(f(s_u) +f(fa_u)) \]

其中 \(f(1) = 1, f(u \mid u \in \text{leaf}) = 0\)。

这个转移方式有点技巧。假设有链 \(1 \rightarrow 2 \rightarrow 3 \rightarrow 4 \cdots\)。那么 \(f(2) = \dfrac{1}{2} f(1) + \dfrac{1}{2} f(3)\)。

接下来有 \(f(3) = \dfrac{1}{2} f(2) + \dfrac{1}{2} f(4) = \dfrac{1}{4} f(1) + \dfrac{1}{4} f(3) + \dfrac{1}{2} f(4)\)。移项整理得到 \(f(3) = \dfrac{1}{3} f(1) +\dfrac{2}{3} f(4)\)。

同样操作可以发现规律 \(f(i) = \dfrac{i}{1} f(1) + \dfrac{i - 1}{i} f(i + 1)\)。

首先将树按照浅儿子剖成若干链,对链单独转移,然后再对链顶单独转移即可。预处理逆元可以做到线性。

int f[N], n, m, fa[N], dep[N], s[N]; 
vector<int> E[N];
void dfs(int u, int F) {
	fa[u] = F; for (auto v : E[u]) if (v ^ F) {
		dfs(v, u); if (!dep[u]) dep[u] = dep[v] + 1, s[u] = v;
		else if (dep[v] + 1 < dep[u]) s[u] = v, dep[u] = dep[v] + 1;
	}
}
void dp(int u, int t, int d) {
	if (!s[u]) return; dp(s[u], t, d + 1); 
	f[u] = (d * qpow(d + 1) % mod * f[s[u]] % mod + qpow(d + 1) * t % mod) % mod;
	for (auto v : E[u]) if ((v ^ fa[u]) and (v ^ s[u])) dp(v, f[u] % mod, 1);
}
void sub() {
	read(n);
	rep(i, 1, n) E[i].clear(), dep[i] = 0, s[i] = 0, f[i] = 0;
	rop(i, 1, n) {
		int a, b; read(a, b);
		E[a].push_back(b);
		E[b].push_back(a);
	} dfs(1, 0); f[1] = 1; dp(1, 1, 0);
	rep(i, 1, n) printf("%lld ", f[i]);
	return;
}

标签:dep,板刷,dfrac,备赛,2E,int,爱丽丝,dp,mod
From: https://www.cnblogs.com/Link-Cut-Y/p/18548522

相关文章

  • 微信小程序 - 解决报错{“errno“:600001,“errMsg“:“request:fail errcode:-202cronet_
    前言关于此问题网上的教程都无法解决,如果您的报错信息与我相似,即可解决。在微信小程序开发中,详细解决小程序请求接口报错:{“errno”:600001,“errMsg”:“request:failerrcode:-202cronet_error_code:-202error_msg:net::ERR_CERT_AUTHORITY_INVALID”},微信小程序发起网络请求......
  • AtCoder 板刷记录
    话说为啥这些场都没有G题的说[ABC200F]MinflipSummation显然的策略是把全部都是一个数的段变成全不都是另一个数,然后考虑进行dp设一个dp[i][0/1][0/1]表示一下前i个字符中奇偶性为j填的数是k时j的总和然后直接做就行了,需要矩阵快速幂加速一下[ABC201F]Insert......
  • 2025蓝桥杯(单片机)备赛--蜂鸣器、继电器设备控制(三)
    一、蜂鸣器和继电器的控制蜂鸣器和继电器:也是通过P06-P04这两个IO口来进行控制,再看和连接,P0---74HC573---ULN2003-RELAY/BUZZER,出现了新的器件,先看ULN2003,查看数据手册,发现是一个能输出大电流的芯片,里面有反向器,会使输出取反,虽然继电器:低电平工作;蜂鸣器:低电平......
  • CF622E Ants in leaves 题解
    传送门给定一棵\(n\)个节点的树,根节点是\(1\)。这棵树的每一个叶节点都有一只小蚂蚁。每过\(1\)秒钟,可以选择让一些蚂蚁向父节点走一步。注意,两只蚂蚁不能同时在一个除去根节点的节点上。问这些蚂蚁最少用多少秒的时间,使得所有蚂蚁都走到根节点。根结点的各个子树独立,因......
  • 备赛web蓝桥杯①
    数组常用函数//1.find()constarry1=[5,12,8,130,44];constfound=arry1.find(a=>a>10);//这一行使用了find方法,它是JavaScript数组对象的一个方法,用于找出第一个满足提供的测试函数的元素。//find()的箭头函数:变量名=>......
  • Springboot计算机毕业设计基于J2EE的青年志愿者系统4njh9
    Springboot计算机毕业设计基于J2EE的青年志愿者系统4njh9本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表项目功能:志愿者,团队信息,加入团队,活动类型,活动项目,活动报名,活动评价,活动物资,物资领取,体温上......
  • AT板刷记录
    我是彩笔,别人板刷AGC,我板刷ABC和ARC。/fadABC378E-ModSigmaProblem注意到取模只对里面的\(\sum\)取,所以不能直接对每个数算贡献。考虑怎么把这个\(\text{mod}\)去掉,一般是要将其转化成大小比较的形式。现在只能尝试用前缀和改写和式为:\(\sum\limits_{1\lel\ler\leN}......
  • 自动泊车端到端算法 ParkingE2E 介绍
    01算法介绍自主泊车是智能驾驶领域中的一项关键任务。传统的泊车算法通常使用基于规则的方案来实现。因为算法设计复杂,这些方法在复杂泊车场景中的有效性较低。相比之下,基于神经网络的方法往往比基于规则的方法更加直观和多功能。通过收集大量专家泊车轨迹数据,基于学习的仿人策......
  • 【SSL-RL】自监督强化学习:Plan2Explore算法
            ......
  • SpringBoot社区健康网站8gg2e(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,安全宣传,社区活动,活动报名开题报告内容一、研究背景与意义随着互联网的普及和居民健康意识的增强,传统的健康信息传播方式已难以满足现代人的需求。社区......