当前位置: 首页 > news >正文

LGP11993 [JOIST 2025] 迁移计划 学习笔记

LGP11993 [JOIST 2025] 迁移计划 学习笔记

\(\texttt{Luogu Link}\)

前言

线段树合并入门题。

题意简述

给定一个 \(n\) 个结点、以 \(1\) 为根的无权树。称一个点 \(u\) 的危险度 \(d_u\)\(\text{dis}(1,u)\)。接下来需要执行三种操作共 \(m\) 次:

  • 1 x y:对于所有满足 \(d_u=x\) 的点 \(u\),令其能唯一达到的那个 \(d_v=y\) 的点为 \(v\),则 \(w_v\gets w_u+w_v\)\(w_u\gets 0\)。保证 \(y<x\)
  • 2 u x\(w_u\gets w_u+x\)
  • 3 u:回答当前的 \(w_u\)

\(n,m\le 2\times 10^6\)

做法解析

对于暴力来说,实际数据规模最大至少可以卡到 \(O(m\sqrt{n})\) 附近。咋优化呢?

“可加信息的整体迁移”,想线段树合并(此题的“可加”体现在,对于一对父子 \(u,v\),我们 \(v\) 的信息通过 \(\text{dfs}\) 序容易被 \(u\) 统计求和)。我们选择对每个深度开一个线段树(下标对应 \(\text{dfs}\) 序),然后每次把某个深度合并到另一个深度直接合并即可。线段树合并的复杂度理应是对的。

代码实现

#include <bits/stdc++.h>
using namespace std;
using namespace obasic;
const int MaxN=2e6+5;
int N,X,Opt,M,W[MaxN],Y;
vector<int> Tr[MaxN];
int dfn[MaxN],dcnt,dep[MaxN],siz[MaxN];
void dfs(int u){dfn[u]=++dcnt,siz[u]=1;for(int v : Tr[u])dep[v]=dep[u]+1,dfs(v),siz[u]+=siz[v];
}
int srt[MaxN];
struct SegTrees{int val[MaxN<<5],ls[MaxN<<5],rs[MaxN<<5],tot;void pushup(int u){val[u]=val[ls[u]]+val[rs[u]];}void modify(int &u,int cl,int cr,int dd,int x){if(!u)u=++tot;if(cl==cr){val[u]+=x;return;}int cmid=(cl+cr)>>1;if(dd<=cmid)modify(ls[u],cl,cmid,dd,x);else modify(rs[u],cmid+1,cr,dd,x);pushup(u);}int query(int u,int cl,int cr,int dl,int dr){if(!u)return 0;int res=0;if(dl<=cl&&cr<=dr)return val[u];int cmid=(cl+cr)>>1;if(dl<=cmid)res+=query(ls[u],cl,cmid,dl,dr);if(dr>cmid)res+=query(rs[u],cmid+1,cr,dl,dr);return res;}int merge(int u,int v,int cl,int cr){if(!u||!v)return u|v;if(cl==cr){val[u]+=val[v];return u;}int cmid=(cl+cr)>>1;ls[u]=merge(ls[u],ls[v],cl,cmid);rs[u]=merge(rs[u],rs[v],cmid+1,cr);pushup(u);return u;}
}SgS;
int main(){readi(N);for(int i=2;i<=N;i++)readi(X),Tr[X].push_back(i);for(int i=1;i<=N;i++)readi(W[i]);dfs(1);for(int i=1;i<=N;i++)SgS.modify(srt[dep[i]],1,N,dfn[i],W[i]);readi(M);for(int i=1;i<=M;i++){readi(Opt);if(Opt==1){readis(X,Y);srt[Y]=SgS.merge(srt[Y],srt[X],1,N);srt[X]=0;}if(Opt==2){readis(X,Y);SgS.modify(srt[dep[X]],1,N,dfn[X],Y);}if(Opt==3){readi(X);writil(SgS.query(srt[dep[X]],1,N,dfn[X],dfn[X]+siz[X]-1));}}return 0;
}
http://www.jsqmd.com/news/14048/

相关文章:

  • 2025年陶瓷膜瑕疵检测厂家最新权威推荐榜:专业检测设备批发与精准识别技术深度解析
  • docekr自动更新脚本
  • C语言restrict关键字
  • 应用安全 --- IDA Pro 函数头批量导出
  • 2025年液压阀块厂家最新推荐排行榜,液压阀块加工,阀块零件机加工,液压阀加工,各种液压阀块专业制造商实力解析
  • 线程的状态对比:等待、驻留、监视
  • ‌Keepalived‌是一个轻量级的高可用解决方案
  • [论文阅读] AI + 软件工程(Debug)| 告别 “猜 bug”:TreeMind 用 LLM+MCTS 破解 Android 不完整报告复现难题 - 实践
  • 2025 年上海金蝶软件代理推荐榜:上海金蝶精斗云代理商聚焦数字化适配,这家核心代理商值得选
  • 2025年法兰保护罩厂家最新推荐排行榜:管道法兰保护罩,设备法兰保护罩,耐腐蚀法兰保护罩,定制法兰保护罩公司推荐
  • 曝光骗子游小龙被多个用户举报QQ3595441998,骗取订金、不发货
  • 128.最长连续序列
  • 栈的基本函数
  • 软件开发初学
  • DevExpress WinForms v25.2新功能预览 - 报表组件方面的全新升级
  • 2025年振动电机厂家最新权威推荐榜:高频/防爆/低噪声/卧式/直流/节能/侧板式/三段式全系列深度解析与选购指南
  • 测试面试官亲述:打动我的不是技能,而是这种思维
  • 分布式架构下的信息一致性、幂等性与缓存设计实战:以库存下单为例(Cache-Aside、分布式锁、幂等键)
  • 大数据分析之MySQL学习1
  • 实用指南:开源 | 充电桩 运维 管理平台(IoT+运维工单平台)功能清单 - 慧知开源充电桩平台
  • 2025年GEO(AI搜索优化)源头厂家终极口碑推荐榜
  • 2025年GEO(AI搜索优化)源头厂家Top10权威推荐榜
  • 2025 年丝杆升降机厂家行业推荐榜:螺旋丝杆升降机/蜗杆丝杆升降机/蜗轮丝杆升降机/聚焦精准传动需求,德州德特机械设备有限公司成优选
  • 073_尚硅谷_其它进制转二进制
  • 深度解读:2025中国太阳能板TOP10榜单背后的格局颠覆与逻辑
  • Docker - 部署Consul 新
  • 重新定义行业:2025年中国市场最值得关注的十大太阳能品牌
  • 2025年变位机厂家最新权威推荐榜:焊接变位机/防位移变位机/重型变位机,精准定位与高效协同技术解析
  • 使用TCL脚本快速创建Quartus工程
  • 真家宽IP vs 数据中心IP:Cliproxy为何成为跨境电商首选? - 详解