当前位置: 首页 > 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.hskmm.com/?act=detail&tid=31537

相关文章:

  • 2025年陶瓷膜瑕疵检测厂家最新权威推荐榜:专业检测设备批发与精准识别技术深度解析
  • docekr自动更新脚本
  • C语言restrict关键字
  • 企业搜索与智能工作流集成技术解析
  • 2025年液压阀块厂家最新推荐排行榜,液压阀块加工,阀块零件机加工,液压阀加工,各种液压阀块专业制造商实力解析
  • 线程的状态对比:等待、驻留、监视
  • [论文阅读] AI + 软件工程(Debug)| 告别 “猜 bug”:TreeMind 用 LLM+MCTS 破解 Android 不完整报告复现难题 - 实践
  • 软件开发初学
  • 2025年振动电机厂家最新权威推荐榜:高频/防爆/低噪声/卧式/直流/节能/侧板式/三段式全系列深度解析与选购指南
  • 测试面试官亲述:打动我的不是技能,而是这种思维
  • 大数据分析之MySQL学习1
  • 2025年GEO(AI搜索优化)源头厂家终极口碑推荐榜
  • 2025年GEO(AI搜索优化)源头厂家Top10权威推荐榜
  • 10.15
  • 2025 年丝杆升降机厂家行业推荐榜:螺旋丝杆升降机/蜗杆丝杆升降机/蜗轮丝杆升降机/聚焦精准传动需求,德州德特机械设备有限公司成优选
  • 深度解读:2025中国太阳能板TOP10榜单背后的格局颠覆与逻辑
  • Docker - 部署Consul 新
  • 重新定义行业:2025年中国市场最值得关注的十大太阳能品牌
  • 2025年变位机厂家最新权威推荐榜:焊接变位机/防位移变位机/重型变位机,精准定位与高效协同技术解析
  • 使用TCL脚本快速创建Quartus工程
  • kv cache缓存
  • 为什么笔记本电脑突然变得很卡?固态硬盘突然变慢是什么原因?
  • 用 Uni-app 开发 C3 继续教育题库系统:静态资源导入、响应式交互与考试逻辑实现全解析
  • 2025年上海律师服务最新权威推荐榜:经侦律师,民事/刑事律师,经济/婚姻律师,法务律师,负债律师事务所专业解析
  • 2025 年永磁电机厂家推荐台州市台成机电,单相永磁电机,三相永磁电机,变频永磁电机,稀土永磁电机,直流永磁电机,无刷永磁电机,风机永磁电机,节能永磁电机,高效永磁电机公司推荐
  • 2025年实验室净化/手术室净化/洁净室工程厂家最新权威推荐榜:专业建设与无尘车间装修一站式解决方案
  • 深入理解 `itertools`:分类解析常用函数 (Effective Python 第36条) - 教程
  • linux配置环境变量
  • assert的基本用法
  • 1688代发铺货规格匹配设置