B 开组会(可持久线段树+树剖) 武汉大学2023年新生程序设计竞赛(同步赛)



其实题目就是每次询问一个节点
在这个节点的基础上往下继续遍历t的深度,在这个遍历的过程中找一个最大值就行了
其实这个题目数据非常水,直接暴力就可以过了
下面是别人过的代码
#include<bits/stdc++.h>
using namespace std;
const int mxn=5e5+10;
#define ll long long
ll n,m,a[mxn];
vector<ll> v[mxn];
ll dfs(int t,int x){ll ans=a[x];if(t==0) return ans;for(auto i:v[x])ans=max(dfs(t-1,i),ans);return ans;
}
int main(){ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);cin>>n;for(int i=1;i<=n;i++) cin>>a[i];for(int x,y,i=1;i<n;i++)cin>>x>>y,v[x].push_back(y);cin>>m;for(int t,x,i=1;i<=m;i++){cin>>t>>x;cout<<dfs(t,x)<<"\n";}return 0;
}
但是我这还是说一下数据结构维护的做法
首先先dfs一次求dfn序,每个节点子树的sz,每个节点的深度dep
然后建一颗可持久化线段树
dep从1-n依次把每个点的权值插入到dfn序中,同时root维护的时当前dep插入完后头节点是啥
也就是在root[x]中已经把dep从1-x中的所有的值插入进去了
然后询问的时候询问在root[min(n, dep[x] + t)] 从dfn[x]到dfn[x] + sz[x] - 1
因为你最深的深度是min(n, dep[x] + t) 此时root已经把低于最深的深度的所以数都插入进去了
dfn序又帮你把询问的区间给确定了
using namespace std;
const int inf = 0x3f3f3f3f3f3f3f3f, N = 5e5 + 5, mod = 1e9 + 7;
int a[N];
vector<int>q[N], e[N];
int cnt, dep[N], dfn[N];
int sz[N];
void dfs(int x, int fa)
{dfn[x] = ++cnt;dep[x] = dep[fa] + 1;sz[x] = 1;for (auto w : q[x]) {if (w == fa) continue;dfs(w, x);sz[x] += sz[w];}
}
struct Tree
{int l, r, mx;
}tr[N*40];
int idx;
int build(int l, int r)
{int p = ++idx;if (l == r) return p;int mid = l + r >> 1;tr[p].l = build(l, mid), tr[p].r = build(mid + 1, r);return p;
}
void pushup(int p)
{tr[p].mx = max(tr[tr[p].l].mx, tr[tr[p].r].mx);
}
int insert(int p, int l, int r, int x,int val)
{int q = ++idx;tr[q] = tr[p];if (l == r) {tr[q].mx = val;return q;}int mid = l + r >> 1;if (x <= mid) tr[q].l = insert(tr[p].l, l, mid, x, val);else tr[q].r = insert(tr[p].r, mid + 1, r, x, val);pushup(q);return q;
}
int root[N];
int ask(int p, int L, int R, int l, int r)
{if (l <= L && R <= r) {return tr[p].mx;}int mid = L + R >> 1;int mx = 0;if (l <= mid) mx = max(mx, ask(tr[p].l, L, mid, l, r));if (r > mid) mx = max(mx, ask(tr[p].r, mid + 1, R, l, r));return mx;
}
signed main()
{ios_base::sync_with_stdio(0); cin.tie(0), cout.tie(0);int n;cin >> n;for (int i = 1; i <= n; i++) {cin >> a[i];}for (int i = 1; i < n; i++) {int u, v;cin >> u >> v;q[u].push_back(v);q[v].push_back(u);}dfs(1, 0);for (int i = 1; i <= n; i++) {e[dep[i]].push_back(i);}root[0] = build(1, n);for (int i = 1; i <= n; i++) {int pre = 0;for (auto w : e[i]) {root[i] = insert(max(root[i - 1],pre), 1, n, dfn[w], a[w]);pre = root[i];}if (root[i] == 0) {root[i] = root[i - 1];}}int m;cin >> m;while (m--){int t, x;cin >> t >> x;cout << ask(root[min(n, dep[x] + t)], 1, n, dfn[x], dfn[x] + sz[x] - 1) << '\n';}
}
相关文章:
B 开组会(可持久线段树+树剖) 武汉大学2023年新生程序设计竞赛(同步赛)
其实题目就是每次询问一个节点 在这个节点的基础上往下继续遍历t的深度,在这个遍历的过程中找一个最大值就行了 其实这个题目数据非常水,直接暴力就可以过了 下面是别人过的代码 #include<bits/stdc.h> using namespace std; const int mxn5e…...
vue的axios方法
Axios是Vue.js推荐使用的一个基于Promise的HTTP库,用于浏览器和Node.js中发送HTTP请求。它可以让我们更容易地与后端进行数据交互。 以下是Axios的基本用法: 安装Axios 在Vue项目中,可以使用npm来安装Axios: npm install axio…...
gitlab docker部署,备份,恢复。附踩坑记录
本次安装在CentOS7下进行 1、安装yum 检查是否已经安装yum yum --version如果未安装 sudo yum install -y yum-utils添加镜像源: 国外镜像源:yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo阿里镜像源&am…...
2023品牌新媒体矩阵营销洞察报告:流量内卷下,如何寻找增长新引擎?
近年来,随着移动互联网的发展渗透,短视频、直播的兴起,新消费/新零售、兴趣电商/社交电商等的驱动下,布局线上渠道已成为绝大多数品牌的必然选择。 2022年,越来越多的品牌加入到自运营、自播的行列中,并且从…...
HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Toggle
组件提供勾选框样式、状态按钮样式及开关样式。该组件从API Version 8开始支持。 仅当ToggleType为Button时可包含子组件。 一、接口 Toggle(options: { type: ToggleType, isOn?: boolean }) 从API version 9开始,该接口支持在ArkTS卡片中使用。 参数: Toggle…...
redis,mongoDB,mysql,Elasticsearch区别
Redis: Redis是一种高性能键值存储数据库,基于内存操作,支持数据持久化,支持数据类型丰富灵活,如字符串、哈希、列表、集合、有序集合等。Redis还提供了订阅/发布、事务、Lua脚本、主从同步等功能,适用于访…...
什么是软件测试架构师?
软件测试架构师是一个新职位,但确实是一个非常必要的职位,主要有几点: 1. 根据V模型、广义测试概念等,(静态)测试的越早,发现缺陷越早,越有利于产品的质量、加快产品开发周期、降低企业的成本。更重要预防…...
安科瑞ARB5系列弧光保护装置,智能电弧光保护,保障用电安全
安科瑞虞佳豪壹捌柒陆壹伍玖玖零玖叁 什么是弧光 电弧是放电过程中发生的一种现象,当两点之间的电压超过其工频绝缘强度极限时就会发生。当适当的条件出现时,一个携带着电流的等离子产生,直到电源侧的保护设备断开才会消失。空气在通常条件…...
查找算法——二分查找法
一、介绍 首先需要将查找的数据排好序,再进行二分查找法来进行查找,二分查找是将数据范围不断分割为两份,不断比较中间值与待查找值的大小来确定其在哪个区间范围的一种方法。例如:在一组数据(1,4ÿ…...
大数据——Spark Streaming
是什么 Spark Streaming是一个可扩展、高吞吐、具有容错性的流式计算框架。 之前我们接触的spark-core和spark-sql都是离线批处理任务,每天定时处理数据,对于数据的实时性要求不高,一般都是T1的。但在企业任务中存在很多的实时性的任务需求&…...
graphviz 绘制二叉树
代码 digraph BalancedBinaryTree {node [fontname"Arial", shapecircle, stylefilled, color"#ffffff", fillcolor"#0077be", fontsize12, width0.7, height0.7];edge [fontname"Arial", fontsize10, color"#333333", arr…...
STM32 PA15/JTDI 用作普通IO,烧录口不能使用问题解决
我们一般用SW调试接口 所以DEBUG选择Serial Wire 这样PA15可以用作普通IO使用。 工程中默认加上: PA13(JTMS/SWDIO).ModeSerial_Wire PA13(JTMS/SWDIO).SignalDEBUG_JTMS-SWDIO PA14(JTCK/SWCLK).ModeSerial_Wire PA14(JTCK/SWCLK).SignalDEBUG_JTCK-SWCLK...
【ARM Coresight 系列文章 9 -- ETM 介绍 1】
文章目录 ARM Coresight ETM 介绍1.1.1 ARM Coresight ETM 版本介绍1.1.2 ARM Coresight 常见术语1.2 ARM Coresight ETM 常用寄存器介绍1.2.1 TRCVIIECTLR(ViewInst Include-Exclude Control Register)1.2.2 TRCVISSCTLR(ViewInst Start/Stop Processing Element Comparator C…...
设计模式 - 中介者模式
目录 一. 前言 二. 实现 三. 优缺点 一. 前言 中介者模式又叫调停模式,定义一个中介角色来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。 中介者模式可以使对象之间的关系数量急剧减少࿰…...
HttpServletRequest对象与RequestDispatcher对象
一、HttpServletRequest对象 1.介绍 在Servlet API中,定义了一个HttpServletRequest接口,它继承自ServletRequest接口,专门用来封装HTTP请求消息。由于HTTP请求消息分为请求行、请求消息头和请求消息体三部分,因此,在…...
Spring Boot启动流程
加载启动类:加了SpringBootApplication的启动类的main 方法中,通过运行SpringApplication.run()方法启动 【SpringBootApplication是由EnableAutoConfiguration(导入自动配置AutoConfigurationSelector类从而加载加了Configuration的配置&am…...
ARM day5
三盏灯流水 .text .global _start _start: 1.LDR R0,0X50000A28LDR R1,[R0]ORR R1,R1,#(0X1<<4)STR R1,[R0] 1.LDR R0,0X50000A28LDR R1,[R0]ORR R1,R1,#(0X1<<5)STR R1,[R0] 2.LDR R0,0X50006000LDR R1,[R0]BIC R1,R1,#(0X3<<20)ORR R1,R1,#(0X1<<…...
流程引擎概述及组成
流程引擎概述及组成 一、流程引擎概述 流程,可以理解为步骤,一个有序的活动或动作; 引擎,可以理解为驱动,是一个程序或者一套系统。 所以,字面意思可以理解为,流程引擎是一套(或…...
定时任务Apscheduler实践案例
定时任务Apscheduler实践案例 参考文章 https://blog.csdn.net/weixin_44799217/article/details/127353134 实现案例 本案例是使用定时任务apscheduler实现的每个三分钟发送一次邮件的任务 实现代码 import time from apscheduler.schedulers.blocking import BlockingSched…...
C#学习系列相关之多线程(五)----线程池ThreadPool用法
一、线程池的作用 线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
[ACTF2020 新生赛]Include 1(php://filter伪协议)
题目 做法 启动靶机,点进去 点进去 查看URL,有 ?fileflag.php说明存在文件包含,原理是php://filter 协议 当它与包含函数结合时,php://filter流会被当作php文件执行。 用php://filter加编码,能让PHP把文件内容…...
SpringAI实战:ChatModel智能对话全解
一、引言:Spring AI 与 Chat Model 的核心价值 🚀 在 Java 生态中集成大模型能力,Spring AI 提供了高效的解决方案 🤖。其中 Chat Model 作为核心交互组件,通过标准化接口简化了与大语言模型(LLM࿰…...
yaml读取写入常见错误 (‘cannot represent an object‘, 117)
错误一:yaml.representer.RepresenterError: (‘cannot represent an object’, 117) 出现这个问题一直没找到原因,后面把yaml.safe_dump直接替换成yaml.dump,确实能保存,但出现乱码: 放弃yaml.dump,又切…...
python打卡第47天
昨天代码中注意力热图的部分顺移至今天 知识点回顾: 热力图 作业:对比不同卷积层热图可视化的结果 def visualize_attention_map(model, test_loader, device, class_names, num_samples3):"""可视化模型的注意力热力图,展示模…...
6.9本日总结
一、英语 复习默写list11list18,订正07年第3篇阅读 二、数学 学习线代第一讲,写15讲课后题 三、408 学习计组第二章,写计组习题 四、总结 明天结束线代第一章和计组第二章 五、明日计划 英语:复习l默写sit12list17&#…...
在ubuntu等linux系统上申请https证书
使用 Certbot 自动申请 安装 Certbot Certbot 是 Let’s Encrypt 官方推荐的自动化工具,支持多种操作系统和服务器环境。 在 Ubuntu/Debian 上: sudo apt update sudo apt install certbot申请证书 纯手动方式(不自动配置)&…...
