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

news/2025/10/15 14:12:30/文章来源:https://www.cnblogs.com/OrinLoong/p/19143208

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.mzph.cn/news/937497.shtml

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

相关文章

2025年陶瓷膜瑕疵检测厂家最新权威推荐榜:专业检测设备批发与精准识别技术深度解析

2025年陶瓷膜瑕疵检测厂家最新权威推荐榜:专业检测设备批发与精准识别技术深度解析行业背景与发展现状陶瓷膜作为高性能分离材料,在生物医药、食品饮料、环保水处理等领域应用广泛。随着产业升级需求日益迫切,陶瓷膜…

docekr自动更新脚本

docekr自动更新脚本#!/bin/bashserver_name="auth"current_date=$(date "+%Y-%m-%d_%H:%M:%S")jar_name="authority-center-0.0.1.jar"docker stop $server_namedocker rm $server_name…

C语言restrict关键字

restrict关键字是C99标准引入的,它告诉编译器,某个指针是访问其所指向内存区域的唯一途径。 restrict关键字只能用于指针声明,并且必须紧跟在指针类型之后,变量名之前。 明确指针唯一性 使用restrict时,一定要确保…

企业搜索与智能工作流集成技术解析

本文详细介绍了如何通过集成AI工作平台与某中心的企业搜索服务来增强智能工作流,包括技术架构、配置步骤和企业收益,帮助企业提升员工生产力和数据处理能力。增强企业搜索的智能工作流集成 随着组织面临跨多个存储库…

应用安全 --- IDA Pro 函数头批量导出

应用安全 --- IDA Pro 函数头批量导出使用ida内置的识别方法导出""" IDA Pro Hex-Rays Function Header Exporter 功能:批量导出所有函数的Hex-Rays反编译函数头 """import idaapi imp…

2025年液压阀块厂家最新推荐排行榜,液压阀块加工,阀块零件机加工,液压阀加工,各种液压阀块专业制造商实力解析

2025年液压阀块厂家最新推荐排行榜,液压阀块加工,阀块零件机加工,液压阀加工,各种液压阀块专业制造商实力解析液压传动系统作为现代工业装备的核心组成部分,其性能优劣直接影响整个设备的运行效率与可靠性。在液压…

线程的状态对比:等待、驻留、监视

目录线程的状态对比:等待、驻留、监视等待(waiting)和监视(blocked)的区别等待(waiting)和监视(blocked)都算是阻塞吗?线程池没有任务来时,所有核心线程会是等待(waiting)状态?不同类型的等待总结等待(…

‌Keepalived‌是一个轻量级的高可用解决方案

‌Keepalived‌是一个轻量级的高可用解决方案回到顶部 什么是keepalived? ‌Keepalived‌是一个轻量级的高可用解决方案,主要用于Linux系统。它的主要功能是通过虚拟路由冗余协议(VRRP)实现高可用性,确保服务的持…

[论文阅读] AI + 软件工程(Debug)| 告别 “猜 bug”:TreeMind 用 LLM+MCTS 破解 Android 不完整报告复现难题 - 实践

[论文阅读] AI + 软件工程(Debug)| 告别 “猜 bug”:TreeMind 用 LLM+MCTS 破解 Android 不完整报告复现难题 - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !importa…

2025 年上海金蝶软件代理推荐榜:上海金蝶精斗云代理商聚焦数字化适配,这家核心代理商值得选

随着企业数字化转型进入深水区,小微企业对轻量化云服务的需求、中大型企业对全流程 ERP 系统的诉求持续攀升,金蝶软件作为国内企业管理软件领域的领军品牌,其代理商的选择成为企业数字化落地的关键一环。2025 年,市…

2025年法兰保护罩厂家最新推荐排行榜:管道法兰保护罩,设备法兰保护罩,耐腐蚀法兰保护罩,定制法兰保护罩公司推荐

2025年法兰保护罩厂家最新推荐排行榜:管道法兰保护罩,设备法兰保护罩,耐腐蚀法兰保护罩,定制法兰保护罩公司推荐行业背景与发展趋势在工业设备维护领域,法兰保护罩作为关键的防护部件,正发挥着日益重要的作用。随…

曝光骗子游小龙被多个用户举报QQ3595441998,骗取订金、不发货

曝光骗子游小龙被多个用户举报QQ3595441998,骗取订金、不发货曝光骗子游小龙被多个用户举报QQ3595441998,骗取订金、不发货--------------------------------------骗子实名: 游小龙 (深圳) 手机: 13243884907…

栈的基本函数

include include<stdlib.h> define MaxSize using namespace std; typedef int ElemType; typedef struct {ElemType data[MaxSize];int top; }SqStack;void InitSqStack(SqStack *&s) {s=(SqStack *)malloc…

软件开发初学

1 SQL基础 1.1 数据类型 1.1.1 定义 数据:是一个信息集合,以某种数据类型保存在数据库里。数据包括姓名、数字、货币、文本、图形、小数、计算、统计等,几乎涵盖能够想象到的任何东西。 数据可以保存为大写、小写或大…

DevExpress WinForms v25.2新功能预览 - 报表组件方面的全新升级

DevExpress WinForms v25.2新功能预览 - 报表组件方面的全新升级DevExpress WinForms 拥有180+组件和UI库,能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForms能完美构建流畅、美观且易于使用的…

2025年振动电机厂家最新权威推荐榜:高频/防爆/低噪声/卧式/直流/节能/侧板式/三段式全系列深度解析与选购指南

2025年振动电机厂家最新权威推荐榜:高频/防爆/低噪声/卧式/直流/节能/侧板式/三段式全系列深度解析与选购指南行业背景与发展趋势振动电机作为工业生产中不可或缺的核心动力设备,其技术发展与制造业升级息息相关。近…

测试面试官亲述:打动我的不是技能,而是这种思维

请记住,我手中的Pass卡,永远留给那些手握船桨,更懂得看罗盘的航海家。那个让我“心头一亮”的瞬间 大家好,我是一名在互联网大厂做了近8年的测试开发工程师,也作为面试官参与了上百场测试岗位的招聘。 我看过太多…

分布式架构下的信息一致性、幂等性与缓存设计实战:以库存下单为例(Cache-Aside、分布式锁、幂等键)

分布式架构下的信息一致性、幂等性与缓存设计实战:以库存下单为例(Cache-Aside、分布式锁、幂等键)2025-10-15 13:51 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: norma…

大数据分析之MySQL学习1

学习内容: 一、SQL 语言分类DQL(数据查询语言):用于数据查询,包含SELECT语句,可结合FROM(表或视图)、WHERE(查询条件)等进行字段、表或视图的查询。 DML(数据操作语言):用于数据操作,包含INSERT(插入)…

实用指南:开源 | 充电桩 运维 管理平台(IoT+运维工单平台)功能清单 - 慧知开源充电桩平台

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …