当前位置: 首页 > 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.gsyq.cn/news/21522.html

相关文章:

  • 线程的状态对比:等待、驻留、监视
  • 2025年法兰保护罩厂家最新推荐排行榜:管道法兰保护罩,设备法兰保护罩,耐腐蚀法兰保护罩,定制法兰保护罩公司推荐
  • 128.最长连续序列
  • 大数据分析之MySQL学习1
  • 2025年GEO(AI搜索优化)源头厂家Top10权威推荐榜
  • 深度解读:2025中国太阳能板TOP10榜单背后的格局颠覆与逻辑
  • kv cache缓存
  • 2025年上海律师服务最新权威推荐榜:经侦律师,民事/刑事律师,经济/婚姻律师,法务律师,负债律师事务所专业解析
  • 深入理解 `itertools`:分类解析常用函数 (Effective Python 第36条) - 教程
  • assert的基本用法
  • 1688代发铺货规格匹配设置
  • task2
  • 2025年机械加工厂家最新权威推荐榜:钣金/焊接/零件/非标自动化/精密金属加工,专业定制与技术创新实力解析
  • 2025年10月15号随笔
  • Ubuntu20.04安装NVIDIA显卡驱动、CUDA Toolkit、cuDNN步骤(二) - 指南
  • 2025年冲压件厂家最新权威推荐榜:新能源/光伏/精密/异形/五金/铝/汽配/不锈钢/家具冲压件源头厂商深度解析
  • 微信群机器人接口
  • logging模块用法
  • 详细介绍:MQTT数据集成
  • 深入解析:WordPress提速指南:Memcached+Super Static Cache+CDN缓存网站内容
  • 实用指南:WordPress提速指南:Memcached+Super Static Cache+CDN缓存网站内容
  • AI元人文中价值原语博弈系统的理论建构与实践意义探析
  • LGP3201 [HNOI 2009] 梦幻布丁 学习笔记
  • 2025年石头纸设备/吹塑机厂家最新权威推荐榜:环保石头纸、碳酸钙石头纸、固废石头纸及挤出吹塑机、注射吹塑机、半导体清洗液瓶子吹塑机专业选购指南
  • AI技术新突破:图像编辑与浏览器智能体
  • PWN手的成长之路-16-OGeek2019-babyrop
  • 2025年掘进机厂家最新权威推荐榜:隧道掘进机、煤矿掘进机、岩石掘进机、盾构掘进机,专业实力与高效施工口碑之选
  • 2025年冷却塔厂家最新权威推荐榜单:工业冷却塔、闭式冷却塔、横流式冷却塔、逆流式冷却塔专业制造商精选
  • 2025年重庆短视频信息流投流/获客/巨量广告投放/拍摄/代运营推广公司推荐榜区域精选公司分享
  • 俄罗斯合作伙伴 Mobx,用 NocoBase 交付多场景方案