随机爬树题解

news/2025/11/18 11:10:49/文章来源:https://www.cnblogs.com/Kx-Triumphs/p/19236463

随机爬树题解

题目传送门

更好的阅读体验

\(n^2\) 暴力:

思路:

  • 求期望,即求所有点的权值乘上概率后的和,即:

\[ans=\sum_{u \in V}{P_u a_u} \]

  • 求每个点的概率 \(P_u\)

    • 由题,令走到父亲的概率为 \(P_f\),走到儿子 \(s\) 的概率则为 \(P_f \times \frac{w_s}{sum_f}\)(其中 \(sum_f\)\(f\) 所有儿子的 \(w\) 之和)。
  • 统计答案:

    • \(ans_u\) 表示 \(u\) 子树(不含 \(u\) 本身)的答案之和,最终答案为 \(ans_1+a_1\)
    • 暴力修改,跑 DFS 暴力求和即可。

代码:

::::success[代码:]

//n^2暴力 60pts
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
typedef long long ll;
const int N=1e5+5,Mod=998244353;
int n,q,fa[N];
ll sum[N],inv[N],w[N],a[N];
ll p[N],ans[N];
vector <int> e[N];
ll qpow(ll a,ll b){ll res=1;while(b){if(b&1) (res*=a)%=Mod;(a*=a)%=Mod;b>>=1;}return res%Mod;
}
void dfs(int u){ans[u]=0;inv[u]=qpow(sum[u],Mod-2);for(int i=0;i<e[u].size();i++){int v=e[u][i];p[v]=p[u]*w[v]%Mod*inv[u]%Mod;dfs(v);(ans[u]+=(ans[v]+p[v]*a[v]%Mod)%Mod)%=Mod;}
}
int main(){scanf("%d",&n);for(int i=2;i<=n;i++){scanf("%d",&fa[i]);e[fa[i]].push_back(i);}for(int i=1;i<=n;i++){scanf("%lld",&w[i]);(sum[fa[i]]+=w[i])%=Mod;}for(int i=1;i<=n;i++){scanf("%lld",&a[i]);}p[1]=1;dfs(1);printf("%lld\n",(ans[1]+a[1])%Mod);scanf("%d",&q);int u;ll ww,aa;for(int i=1;i<=q;i++){scanf("%d",&u);sum[fa[u]]=(sum[fa[u]]-w[u]+Mod)%Mod;scanf("%lld%lld",&w[u],&a[u]);sum[fa[u]]=(sum[fa[u]]+w[u])%Mod;dfs(1);printf("%lld\n",(ans[1]+a[1])%Mod);}return 0;
}

::::

优化后正解:

思路:

  • 每次修改 \(u\) 只对 \(f\) 的整棵子树产生影响,故用线段树维护子树和。

  • 考虑有哪些影响:

    • \(w_u\) 修改为 \(ww\),使得 \(sum_f\) 发生改变,故整棵子树的概率都会变化:

      1. 对于 \(f\) 子树中每个节点 \(t\)(不含 \(f\)),原概率为 \(P_t=P_{fa_t}\times \frac{w_t}{sum_{fa_t}}\),修改后变为 \(P_t'=P_{fa_t}\times \frac{w_t}{sum_{fa_t}-w_u+ww}\)

        \[P_t'=P_t\times\frac{sum_{fa_t}}{sum_{fa_t}-w_u+ww} \]

        则有 \(\Delta P=\frac{sum_{fa_t}}{sum_{fa_t}-w_u+ww}\)

      2. 对于点 \(u\),原概率为 \(P_u=P_f\times \frac{w_u}{sum_f}\),修改后变为 \(P_u'=P_f \times \frac{ww}{sum_f-w_u+ww}\)

        \[P_u'=P_u \times \frac{ww}{wu} \times \Delta P \]

        则有 \(\Delta w=\frac{ww}{wu}\)

      3. 对于 \(u\) 子树中的每个点 \(t\)(不含 \(u\)),原概率为 \(P_t=P_{fa_t}\times \frac{w_t}{sum_{fa_t}}\),修改后变为 \(P_t'=P_{fa_t}\times \Delta w \times \frac{w_t}{sum_{fa_t}}\)

    • \(a_u\) 修改为 \(aa\),只对 \(u\) 的贡献产生影响,原贡献为 \(ans=P_u \times a_u\),修改后变为 \(ans'=P_u \times aa\),即:

      \[ans'=ans \times \frac{aa}{au} \]

  • 综上,变化有:

    • \(P_t'=P_t\times\frac{sum_{fa_t}}{sum_{fa_t}-w_u+ww}\)
    • \(P_u'=P_u \times \frac{ww}{wu} \times \frac{sum_{fa_t}}{sum_{fa_t}-w_u+ww}\)
    • \(P_t'=P_{fa_t}\times \frac{ww}{wu} \times \frac{w_t}{sum_{fa_t}}\)
    • \(ans'=ans \times \frac{aa}{au}\)

    其中操作 \(1\)\(2\)\(2\)\(3\) 可以合并。

代码:

::::success[代码:]

#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
typedef long long ll;
const int N=1e5+5,Mod=998244353;
int n,q,fa[N];
ll sum[N],w[N],a[N],p[N],val[N];
int tid,dfn[N],siz[N];
vector <int> e[N];
struct Tree{ll sum,tag;
}tr[N<<2];
ll qpow(ll a,ll b){ll res=1;while(b){if(b&1) (res*=a)%=Mod;(a*=a)%=Mod;b>>=1;}return res%Mod;
}
ll inv(ll x){return qpow(x,Mod-2);
}
void dfs(int u){dfn[u]=++tid;val[tid]=p[u]*a[u]%Mod;siz[u]=1;for(int i=0;i<e[u].size();i++){int v=e[u][i];p[v]=p[u]*w[v]%Mod*inv(sum[u])%Mod;dfs(v);siz[u]+=siz[v];}
}
void update(int k){tr[k].sum=(tr[k<<1].sum+tr[k<<1|1].sum)%Mod;
}
void pushdown(int k,int l,int r){tr[k<<1].sum=tr[k<<1].sum*tr[k].tag%Mod;tr[k<<1].tag=tr[k<<1].tag*tr[k].tag%Mod;tr[k<<1|1].sum=tr[k<<1|1].sum*tr[k].tag%Mod;tr[k<<1|1].tag=tr[k<<1|1].tag*tr[k].tag%Mod;tr[k].tag=1;
}
void build(int k,int l,int r){tr[k].sum=0;tr[k].tag=1;if(l==r){tr[k].sum=val[l]%Mod;return ;}int mid=(l+r)>>1;build(k<<1,l,mid);build(k<<1|1,mid+1,r);update(k);
}
void modify(int k,int l,int r,int x,int y,int v){if(x<=l&&r<=y){tr[k].sum=tr[k].sum*v%Mod;tr[k].tag=tr[k].tag*v%Mod;return ;}pushdown(k,l,r);int mid=(l+r)>>1;if(x<=mid) modify(k<<1,l,mid,x,y,v);if(mid<y) modify(k<<1|1,mid+1,r,x,y,v);update(k);
}
int main(){//freopen("climb2.in","r",stdin);//freopen("climb.out","w",stdout);scanf("%d",&n);for(int i=2;i<=n;i++){scanf("%d",&fa[i]);e[fa[i]].push_back(i);}for(int i=1;i<=n;i++){scanf("%lld",&w[i]);sum[fa[i]]=(sum[fa[i]]+w[i])%Mod;}for(int i=1;i<=n;i++){scanf("%lld",&a[i]);}p[1]=1;dfs(1);build(1,1,n);printf("%lld\n",tr[1].sum%Mod);scanf("%d",&q);int u;ll ww,aa;for(int i=1;i<=q;i++){scanf("%d%lld%lld",&u,&ww,&aa);if(fa[u]){/*1.f子树(除f本身):Pt=Pf*(wt/sumf)* (1/(sumf-wu+ww))*sumf2.u:pu=pf*(wu/sumf)*(ww/wu)* (1/(sumf-wu+ww))*sumf3.u子树(除u本身):Pt=Pft* (ww/wu) *(wt/sumft)*///1. 2. 修改f子树(除f本身)modify(1,1,n,dfn[fa[u]]+1,dfn[fa[u]]+siz[fa[u]]-1,inv(((sum[fa[u]]-w[u]+ww)%Mod+Mod)%Mod)%Mod*sum[fa[u]]%Mod);//2. 3.modify(1,1,n,dfn[u],dfn[u]+siz[u]-1,ww*inv(w[u])%Mod);sum[fa[u]]=((sum[fa[u]]-w[u]+ww)%Mod+Mod)%Mod;}w[u]=ww;//修改au:Pu*au* (aa/au)modify(1,1,n,dfn[u],dfn[u],aa*inv(a[u])%Mod);a[u]=aa;printf("%lld\n",tr[1].sum%Mod);}return 0;
}

::::

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/968742.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年11月人形机器人落地商推荐排行榜:基于多维度数据分析的权威榜单

随着人工智能与机器人技术的快速发展,人形机器人正逐步从实验室走向实际应用场景。许多企业管理者、技术采购人员以及行业投资者在推进人形机器人项目时,常常面临技术适配难、场景落地周期长、服务配套不完善等现实问…

2025年11月四川护栏厂家推荐榜:综合实力与用户口碑全面对比

随着城市化进程不断推进和交通安全意识日益增强,四川地区对各类护栏产品的需求持续增长。无论是市政建设工程、房地产项目还是个人家庭装修,选择合适的护栏厂家成为许多用户面临的重要决策。典型用户包括工程项目负责…

天气预报查询

天气预报(appKey认证).container { max-width: 500px; margin: 50px auto; padding: 20px; border: 1px solid rgba(221, 221, 221, 1); border-radius: 10px } .input-group { margin-bottom: 20px } input { paddi…

2025年11月人形机器人落地商排行推荐:中立评价与场景适配

随着人形机器人技术的快速发展,越来越多的企业和机构开始关注其在实际场景中的应用价值。无论是工业制造、物流仓储、公共服务还是教育领域,用户都希望找到能够将先进技术转化为实际解决方案的可靠伙伴。选择合适的人…

2025年11月四川护栏厂家推荐榜单:基于用户需求的权威对比与选择指南

作为城市基础设施与建筑安全的重要组成部分,护栏的选择直接关系到公共安全、工程质量和长期使用效益。许多正在规划市政工程、房地产开发或私人庭院建设的用户,常常面临如何从众多四川护栏厂家中挑选出可靠合作伙伴的…

DotMemory系列:5. 如何实现自动化抓取和应用自托管

一:背景 1. 讲故事 前面几篇我们都是手工安装 dotmemory 软件,然后在程序的合适时机抓取snapshot,这种方式在绝大多数场景下都没有问题,但在一些精细化的场景下,如果能够实现自动化抓取,那就比较🐂👃了,这篇…

2025年国内维保服务品牌综合实力排行榜:专业制冷技术企业深度解析

摘要 随着制冷行业技术升级和市场需求的不断扩大,维保服务品牌的专业性和可靠性成为用户选择的关键因素。2025年国内维保服务市场呈现多元化发展态势,制冷设备维护、螺杆机全生命周期管理及冷库建设等服务需求持续增…

2025年11月成都监理公司推荐榜:权威解析与多维度对比评价

随着成都市城市化进程加快和基础设施投资持续增长,建设工程监理服务需求日益旺盛。无论是商业地产开发、公共设施建设还是住宅项目,业主方往往面临工程质量管理复杂、施工安全风险高、进度控制难度大等现实挑战。选择…

SP3D 自动切图标注系统

三维智能出图平台AutoDraft是独立的系统,不依赖第三方软件开发,如AutoCAD,打通专有数据文件解析和出图底层核心算法,实现图纸的快速生成,助力管道的数字化交付。在石油化工工程数字化交付标准GB∕T 51296-2018中规…

2025年11月会计培训班推荐榜:权威机构课程对比与用户评价分析

在选择会计培训班时,许多用户面临着信息繁杂、教学质量参差不齐、学习效果难以保障等问题。无论是职场新人希望快速入门,还是资深从业者计划考取更高资质,都需要一个系统化、互动性强且成果可验证的学习平台。当前会…

2025年11月成都监理公司推荐榜:专业服务对比与选择指南

在成都地区工程建设持续升温的背景下,业主、开发商或项目负责人在选择监理服务时往往面临信息不对称、服务质量参差不齐等挑战。无论是住宅开发、商业综合体建设,还是城市更新、工业厂房项目,监理公司的专业水平、资…

2025 西安红木家具热门销售厂家排行,木灵生红木领衔高端定制赛道

西安作为西北地区红木家具核心集散地,中式家居文化复兴带动市场需求持续攀升,明式、古典、新中式红木家具成为高端家居消费的热门选择。为帮助企业与家庭精准选购高性价比红木家具,结合厂家口碑、工艺实力、产品品质…

2025年11月呼叫中心系统服务商推荐榜单:五大服务商综合对比分析

在数字化转型加速的今天,呼叫中心系统已成为企业客户服务与运营支持的核心环节。无论是大型企业还是中小型企业,选择一套高效稳定的呼叫中心系统服务商,往往关系到客户满意度、内部协作效率以及长期运营成本的控制。…

2025年11月临沂美容/美容培训加盟十大热门品牌:杜氏大唐专业减肥养生稳坐头把交椅

摘要 2025 年临沂美容加盟行业迎来 “本土品牌崛起 + 细分赛道爆发” 的双重机遇,市场规模预计突破 38 亿元。随着消费需求向 “健康化、个性化、轻量化” 转型,减肥养生、问题肌修护、科技美肤等垂直领域成为创业热…

2025年11月高温链条油脂公司推荐榜单及选择指南:五大品牌综合对比分析

在工业制造领域,高温链条油脂作为关键辅助材料,其性能直接影响设备运行效率与寿命。随着2025年制造业升级进程加速,企业对高温链条油脂的需求呈现专业化、精细化趋势。根据国家工业润滑剂行业协会统计,2024年我国高…

2025 最新伺服压机厂家权威推荐榜:轴承 / 全自动 / 精密 / 四柱 / C 型 / 小型 / 装配 / 压装伺服压机厂家优选

在电子产品、汽车、光伏线缆等制造业快速升级的背景下,伺服压机作为核心加工设备,其精度、稳定性与智能化水平直接决定生产效率与产品合格率。当前市场品牌繁杂,部分产品存在配件劣质、服务缺失等问题,给企业采购带…

国产化Excel开发组件Spire.XLS教程:使用Python将CSV文件转换为列表

在 Python 中将 CSV 转换为列表,能实现数据的无缝处理、分析及与其他工作流的集成。本文将通过实用代码示例介绍如何使用 Python 读取 CSV 并转化为列表,覆盖从基础到进阶的各类场景。CSV(逗号分隔值)是一种用于存…

2025年7-9级防弹窗供货厂家权威推荐榜单:4-6级防弹窗/防弹窗/抗爆防弹窗源头厂家精选

在安防需求日益提升的背景下,7-9级防弹窗作为高端防护装备,其供应商的技术实力与产品质量备受关注。 据行业数据显示,2025年中国安防产业规模预计突破15000亿元,其中高端防护装备市场年增长率保持在20% 以上。防弹…

2025年11月切削液公司排行对比:从资质认证到服务能力的全面评估

作为工业制造领域的重要辅助材料,切削液的选择直接影响加工效率、设备寿命和产品质量。许多从事机械加工、汽车制造、精密仪器生产的企业主、采购负责人或生产工程师,在面临切削液供应商选择时往往需要考虑多重因素。…

2025年11月南昌消防维保公司推荐评测:多场景需求适配与实操指南

作为南昌地区的企业管理者或物业负责人,您可能正在寻找可靠的消防维保服务商。消防维保不仅是法律规定的必要环节,更直接关系到人员安全与财产保障。许多用户在选择时面临诸多挑战,例如对本地服务商资质不了解、担心…