CF825G Tree Queries

CF825G Tree Queries

洛谷CF825G Tree Queries

题目大意

一棵树有 n n n个节点,初始时均为白色,有两种操作:

  • 1 x表示把结点 x x x染成黑色
  • 1 x表示查询 x x x到树上任意一个黑色结点的简单路径上的编号最小的结点的编号

本题强制在线。输入 t p tp tp z z z,其中 t p tp tp表示操作类型, x = ( z + l a s t ) m o d n + 1 x=(z+last)\bmod n+1 x=(z+last)modn+1,其中 l a s t last last为上一次询问的答案,初始时 l a s t = 0 last=0 last=0

保证第一次操作为操作 1 1 1

1 ≤ n , q ≤ 1 0 6 1\leq n,q\leq 10^6 1n,q106


题解

我们把第一个染成黑色的点 t t t设为根,设查询的点为 x x x,某个被染成黑色的点为 y y y

a n s = min ⁡ y { d i s ( x , y ) } ans=\min\limits_y\{dis(x,y)\} ans=ymin{dis(x,y)},其中 d i s ( x , y ) dis(x,y) dis(x,y)表示 x → y x\to y xy路径上编号最小的点。

x x x y y y l c a lca lca z z z,则 d i s ( x , y ) = min ⁡ ( d i s ( x , z ) , d i s ( z , y ) ) dis(x,y)=\min(dis(x,z),dis(z,y)) dis(x,y)=min(dis(x,z),dis(z,y))

那么 a n s = min ⁡ y { min ⁡ ( d i s ( x , z ) , d i s ( z , y ) ) } ans=\min\limits_y\{\min(dis(x,z),dis(z,y))\} ans=ymin{min(dis(x,z),dis(z,y))}

因为 d i s ( t , x ) ≤ d i s ( x , z ) dis(t,x)\leq dis(x,z) dis(t,x)dis(x,z),所以 d i s ( x , z ) dis(x,z) dis(x,z)肯定会被 d i x ( t , x ) dix(t,x) dix(t,x)覆盖,那么 a n s = min ⁡ ( d i s ( t , x ) , min ⁡ y { d i s ( z , y ) } ) ans=\min(dis(t,x),\min\limits_y\{dis(z,y)\}) ans=min(dis(t,x),ymin{dis(z,y)})

我们继续推式子。 min ⁡ ( d i s ( t , x ) , d i s ( z , y ) ) = min ⁡ ( d i s ( t , z ) , d i s ( z , x ) , d i s ( z , y ) ) = min ⁡ ( d i s ( t , x ) , d i s ( t , y ) ) \min(dis(t,x),dis(z,y))=\min(dis(t,z),dis(z,x),dis(z,y))=\min(dis(t,x),dis(t,y)) min(dis(t,x),dis(z,y))=min(dis(t,z),dis(z,x),dis(z,y))=min(dis(t,x),dis(t,y)),所以 a n s = min ⁡ ( d i s ( t , x ) , min ⁡ y { d i s ( t , y ) } ) ans=\min(dis(t,x),\min\limits_y\{dis(t,y)\}) ans=min(dis(t,x),ymin{dis(t,y)})

也就是说,我们只需要用 d f s dfs dfs求出 t t t到每个点 x x x d i s ( t , x ) dis(t,x) dis(t,x),然后维护 min ⁡ y { d i s ( t , y ) } \min\limits_y\{dis(t,y)\} ymin{dis(t,y)}即可。

时间复杂度为 O ( n + q ) O(n+q) O(n+q)

code

#include<bits/stdc++.h>
using namespace std;
const int N=1000000;
int n,q,rt,tmp,ans,tot=0,d[2*N+5],l[2*N+5],r[N+5],dis[N+5];
void add(int xx,int yy){l[++tot]=r[xx];d[tot]=yy;r[xx]=tot;
}
void dfs(int u,int fa){for(int i=r[u];i;i=l[i]){if(d[i]==fa) continue;dis[d[i]]=min(dis[u],d[i]);dfs(d[i],u);}
}
int main()
{scanf("%d%d",&n,&q);for(int i=1,x,y;i<n;i++){scanf("%d%d",&x,&y);add(x,y);add(y,x);}scanf("%*d%d",&rt);--q;tmp=rt=(rt+ans)%n+1;dis[rt]=rt;dfs(rt,0);for(int i=1,tp,x;i<=q;i++){scanf("%d%d",&tp,&x);x=(x+ans)%n+1;if(tp==1) tmp=min(tmp,dis[x]);else printf("%d\n",ans=min(tmp,dis[x]));}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/135760.shtml

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

相关文章

什么是进销存系统?有哪些流程?

这篇给大家详细介绍一下&#xff0c;到底什么是进销存系统&#xff0c;它的发展历程如何&#xff1f;企业该如何利用进销存系统获得竞争优势&#xff1f; 至于为什么越来越多的企业都选择进销存系统&#xff0c;让我们先来看一下这个实例。 假设有一家零售超市&#xff0c;他…

目标跟踪(DeepSORT)

本文首先将介绍在目标跟踪任务中常用的匈牙利算法&#xff08;Hungarian Algorithm&#xff09;和卡尔曼滤波&#xff08;Kalman Filter&#xff09;&#xff0c;然后介绍经典算法DeepSORT的工作流程以及对相关源码进行解析。 目前主流的目标跟踪算法都是基于Tracking-by-Detec…

PBJ | IF=13.8 利用ChIP-seq和ATAC-seq技术揭示MdRAD5B调控苹果耐旱性的双重分子作用机制

2023年10月24日&#xff0c;西北农林科技大学园艺学院管清美教授团队在Plant Biotechnology Journal&#xff08;最新IF&#xff1a;13.8&#xff09;上发表题为“The chromatin remodeller MdRAD5B enhances drought tolerance by coupling MdLHP1-mediated H3K27me3 in apple…

计算机网络期末复习-Part1

1、列举几种接入网技术&#xff1a;ADSL&#xff0c;HFC&#xff0c;FTTH&#xff0c;LAN&#xff0c;WLAN ADSL&#xff08;Asymmetric Digital Subscriber Line&#xff09;&#xff1a;非对称数字用户线路。ADSL 是一种用于通过电话线连接到互联网的技术&#xff0c;它提供…

Spring定时器是否影响性能

Spring定时器是否影响性能 在Spring中&#xff0c;定时器可以使用不同的技术实现&#xff0c;例如Java自带的Timer类、Spring自带的TaskScheduler、Quartz等。无论使用哪种技术实现&#xff0c;定时器的确会对系统性能产生一定的影响。具体来说&#xff0c;定时器会创建一个或…

安卓系统手机便签app使用哪一款?

在现代快节奏的生活中&#xff0c;我们经常会遇到各种繁忙的事务和容易遗忘的备忘事项。为避免大家遗忘重要的事情&#xff0c;大家可以在常用的手机上安装记录备忘事项的工具&#xff0c;为了帮助安卓用户高效地记录和管理这些信息&#xff0c;今天我将向大家推荐一款功能强大…

关于炒股融资的条件,3个你不知道的小知识

随着投资者对股市的关注度不断提高&#xff0c;炒股融资成为了常见的投资方式&#xff0c;但是很多投资者对炒股融资的条件了解不够。下面给大家介绍三个你可能不知道的小知识。 融资比例的计算方式 融资比例指的是投资者可以借的资金比例&#xff0c;其计算方式是融资金额除以…

阿里云oss迁移到AWS S3

这里写自定义目录标题 0.项目背景1.rclone 方式2.rsync方式3.注意 0.项目背景 公司迁移要求&#xff1a;从阿里云oss到亚马逊s3&#xff0c;数据量大概500G-2T左右。 开启阿里云oss 加速模式&#xff0c;这样能够跨机房和区域加速。 主要采用以下两种方式同步数据&#xff0c;…

uniapp小程序接入腾讯云【增强版人脸核身接入】

文档地址&#xff1a;https://cloud.tencent.com/document/product/1007/56812 企业申请注册这边就不介绍了&#xff0c;根据官方文档去申请注册。 申请成功后&#xff0c;下载【微信小程序sdk】 一、解压sdk&#xff0c;创建wxcomponents文件夹 sdk解压后发现是原生小程序代…

程序员副业之路,今天花几分钟提现了18.1元,感觉认真做收益还是不错的

干客户端这么多年了&#xff0c;越来越觉得力不从心了&#xff0c;以前加班到半夜&#xff0c;睡一觉第二天又生龙活虎继续干&#xff0c;现在时常感叹&#xff1a;年轻就是好呀&#xff0c;有使不完的劲&#xff0c;就像下面这位兄弟这样&#xff0c;跪着都能给你把代码写完。…

对一个以“#”结束的字符串

本题要求编写程序&#xff0c;对一个以“#”结束的字符串&#xff0c;将其小写字母全部转换成大写字母&#xff0c;把大写字母全部转换成小写字母&#xff0c;其他字符不变输出。 输入格式&#xff1a; 输入为一个以“#”结束的字符串&#xff08;不超过30个字符&#xff09;…

Halcon如何使用SaperaLT库连接dalsa相机

halcon安装好的时候&#xff0c;没有带SaperaLT的采集库&#xff0c;需要额外在Halcon官网下载此库。 以下是halcon官网下载此库的链接。官网需要注册才可以下载。 https://www.mvtec.com/downloads/interfaces?tx_mvtecproduct_extensiondownloadlist%5Bfilter%5D%5B0%5Dma…

CC1101 一款低功耗sub- 1ghz收发器芯片 适用于无线遥控智能家居

产品描述 CC1101是一个低成本的sub- 1ghz收发器,专为极低功耗的无线应用而设计。 该电路主要用于工业、科学和医学)和SRD (Short Range Device)频带,在315,433,868和915兆赫&#xff0c;但可以轻松可编程用于其他操作频率在300-348 MHz、387-464 MHz,以及779-928 MHz频段。射…

linux服务器超简单安装配置nginx

1.更新软件源索引并安装 Nginx 对于 CentOS/RHEL: sudo yum update sudo yum install nginx 对于 Ubuntu/Debian: sudo apt update sudo apt install nginx 2.启动 Nginx sudo systemctl start nginx 3.设置 Nginx 开机自启动 sudo systemctl enable nginx 此时 N…

Vulnhub靶场之Funbox

正如该靶场的描述所说&#xff0c;它对初学者来说非常简单。 项目地址&#xff1a;Funbox: Scriptkiddie ~ VulnHub 所需工具&#xff1a; KaliLinux即可。 0x00 信息收集 打开虚拟机后使用nmap扫描一下网段存活&#xff0c;这里我给的虚拟机的范围是100-253,其中kali的IP是10…

16 _ 二分查找(下):如何快速定位IP对应的省份地址?

通过IP地址来查找IP归属地的功能,不知道你有没有用过?没用过也没关系,你现在可以打开百度,在搜索框里随便输一个IP地址,就会看到它的归属地。 这个功能并不复杂,它是通过维护一个很大的IP地址库来实现的。地址库中包括IP地址范围和归属地的对应关系。 当我们想要查询202…

uniapp在不需要后端数据的情况下 怎么记录用户进一次记录一次

目录 前言&#xff1a; html部分 js部分 完整代码 前言&#xff1a; 一时兴起&#xff0c;不喜勿喷&#xff0c;今天听到了这个问题想到了一个方法&#xff0c;解决方式如下。 html部分 他用于显示访问次数&#xff08;visitCount变量的值&#xff09;。 <template&…

【测试工具】UnixBench 测试

一、UnixBench 简介 UnixBench 原本叫做 BYTE UNIX benchmark suite。软件为 Unix 类的系统提供了一些基本的性能指标。通过不同的测试来测试系统不同方面的性能&#xff08;2D&#xff0c;3D&#xff0c;CPU&#xff0c;内存等等&#xff09;。这些测试的结果将和一些标准的系…

【Docker】iptables命令的使用

iptables是一个非常强大的Linux防火墙工具&#xff0c;你可以使用它来控制网络流量的访问和转发。 前面已经学习了iptables的基本原理&#xff0c;四表五链的基本概念&#xff0c;也已经安装好了iptables&#xff0c;下面我们主要学习iptables命令的基本使用。 可以使用iptable…

合肥工业大学计算机网络课设-在线留言板

✅作者简介:CSDN内容合伙人、信息安全专业在校大学生🏆 🔥系列专栏 :hfut实验课设 📃新人博主 :欢迎点赞收藏关注,会回访! 💬舞台再大,你不上台,永远是个观众。平台再好,你不参与,永远是局外人。能力再大,你不行动,只能看别人成功!没有人会关心你付出过多少…