P5311 [Ynoi2011] 成都七中
题目描述
给你一棵 nnn 个节点的树,每个节点有一种颜色,有 mmm 次查询操作。
查询操作给定参数 lrxl\ r\ xl r x,需输出:
将树中编号在 [l,r][l,r][l,r] 内的所有节点保留,xxx 所在连通块中颜色种类数。
每次查询操作独立。
对于 100%100\%100% 的数据,所有出现过的数在 [1,105][1,10^5][1,105] 之间,保证每次输入的 l≤x≤rl \le x \le rl≤x≤r。
题解
建出点分树,可以发现这样一个性质,对于树上任意一个连通块,一定有一个连通块上的点,在点分树该点的子树中包含连通块的所有点
那么对于每个询问中的xxx,我们找到它在点分树上一个深度最低的祖先vvv,满足vvv与xxx可以通过[l,r][l,r][l,r]之间的点连通,那么问题就变成了求vvv所在连通块中颜色种类数,连通块只会在vvv的点分树子树内,这就变得很好做,一个点和vvv是否连通可以求出它到vvv的编号最小值min\minmin和最大值max\maxmax,它与vvv连通当且仅当l≤min,max≤rl\le\min,\max\le rl≤min,max≤r,二维数点即可
code\text{code}code
#include<cstdio>
#include<algorithm>
using namespace std;
void read(int &res)
{res=0;char ch=getchar();while(ch<'0'||ch>'9') ch=getchar();while('0'<=ch&&ch<='9') res=(res<<1)+(res<<3)+(ch^48),ch=getchar();
}
const int N=2e5+100;
int n,q,a[N+10],st[N+10],tot;
struct edge
{int to,last;
}e[N<<1|1];
void add(int a,int b)
{e[++tot].to=b;e[tot].last=st[a];st[a]=tot;
}
struct node
{int l,r,id;
};
vector<node> p[N+10];
int rt,siz[N+10],sum,ans[N+10];
bool vis[N+10];
void getrt(int u,int fa)
{siz[u]=1;int maxn=0;for(int i=st[u],v;i!=0;i=e[i].last){v=e[i].to;if(v==fa||vis[v]) continue;getrt(v,u),siz[u]+=siz[v],maxn=max(maxn,siz[v]);}maxn=max(maxn,sum-siz[u]);if((maxn<<1)<=sum) rt=u;
}
int cnt;
struct qst
{int id,l,r,co;
}g[N+10];
bool cmp(qst a,qst b){return a.l>b.l||(a.l==b.l&&a.r<b.r||a.l==b.l&&a.r==b.r&&a.id<b.id);}
int pre[N+10];
void dfs(int u,int minn,int maxn,int fa)
{minn=min(minn,u),maxn=max(maxn,u);g[++cnt]=(qst){0,minn,maxn,a[u]};for(auto v:p[u])if(v.l<=minn&&maxn<=v.r&&!ans[v.id])g[++cnt]=(qst){v.id,v.l,v.r,0};for(int i=st[u],v;i!=0;i=e[i].last){v=e[i].to;if(v==fa||vis[v]) continue;dfs(v,minn,maxn,u);}
}
struct Tree
{int t[N+10];int lowbit(int x){return x&-x;}void update(int x,int k){for(;x<=N;x+=lowbit(x))t[x]+=k;}int query(int x){int res=0;for(;x;x-=lowbit(x)) res+=t[x];return res;}
}t;
void solve(int u)
{getrt(u,0),sum=siz[u],getrt(u,0),u=rt;cnt=0;dfs(u,N,0,0);sort(g+1,g+1+cnt,cmp);for(int i=1;i<=cnt;i++){if(g[i].id==0){if(!pre[g[i].co]) t.update(g[i].r,1),pre[g[i].co]=g[i].r;else{if(g[i].r<pre[g[i].co])t.update(pre[g[i].co],-1),t.update(g[i].r,1),pre[g[i].co]=g[i].r;}}else ans[g[i].id]=t.query(g[i].r);}for(int i=1;i<=cnt;i++)if(g[i].id==0&&pre[g[i].co])t.update(pre[g[i].co],-1),pre[g[i].co]=0;vis[u]=true;for(int i=st[u],v;i!=0;i=e[i].last){v=e[i].to;if(vis[v]) continue;solve(v);}
}
int main()
{
// freopen("a.in","r",stdin);read(n),read(q);for(int i=1;i<=n;i++) read(a[i]);for(int i=1,a,b;i<n;i++) read(a),read(b),add(a,b),add(b,a);for(int i=1,l,r,x;i<=q;i++) read(l),read(r),read(x),p[x].push_back({l,r,i});solve(1);for(int i=1;i<=q;i++) printf("%d\n",ans[i]);return 0;
}
相关文章:
P5311 [Ynoi2011] 成都七中
题目描述 给你一棵 nnn 个节点的树,每个节点有一种颜色,有 mmm 次查询操作。 查询操作给定参数 lrxl\ r\ xl r x,需输出: 将树中编号在 [l,r][l,r][l,r] 内的所有节点保留,xxx 所在连通块中颜色种类数。 每次查询操…...
Python 日期和时间格式
Python 程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。Python 提供了一个 time 和 calendar 模块可以用于格式化日期和时间。时间间隔是以秒为单位的浮点小数。每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表…...
电脑和手机的软件推荐
安卓软件 jota text 记事本 x浏览器 (支持禁js,支持嗅探 视频 音频) __ 空缺 暂未能发现好用的office软件 snapseed图片调整 可谓手机界的photoshop vidtrim视频剪辑 librera reader (无广告 电子书软件 但是发音很差 lithum或者…...
酸回收树脂的应用
酸洗废水 在轧钢、金属表面处理、电子元件制造等过程中需要清除钢材表面氧化铁皮而使用酸进行酸洗,酸洗过程中会产生废酸液和酸洗废水。 这些废酸产量大、酸度高,而且由于酸洗废水来自钢铁和金属表面处理的清洗水,水中含有多种重金属离子&am…...
windows上配置IIS全过程
文章目录1️⃣ 配置IIS1.1 从开始打开服务器管理1.2 添加角色和功能1.3 添加角色和功能向导1.4 按照如下步骤选择2️⃣ 问题:缺少源文件解决方案优质资源分享作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/1…...
软考高级信息系统项目管理师系列之十三:项目成本管理
软考高级信息系统项目管理师系列之十三:项目成本管理 一、成本管理领域输入、输出、工具和技术表二、成本管理基础知识点1.成本类型2.应急储备和管理储备3.成本基准三、项目成本管理过程1.项目成本管理的过程2.成本管理计划3.项目成本估算的主要步骤4.活动成本估算5.项目预算6…...
HIVE 基础(一)
目录 启动hive 方式一 方式二 修改hdfs上给定文件执行的读写权限 创建数据库 查看数据库 查看数据库详细信息 查看当前数据库 创建表 查看建表语句 查看表信息 删除表 添加数据 查看表数据 删除数据库 强制删除数据库 启动hive 方式一 [roothadoop1 ~]# hive 方…...
《狂飙》壁纸太帅,Python自动切换太酷(8)
小朋友们好,大朋友们好!我是猫妹!要说最近什么电视剧最火?非《狂飙》莫属。《狂飙》剧名来自毛主席诗词“国际悲歌歌一曲,狂飙为我从天落”。导演借用“狂飙”二字来比喻剧中的扫黑除恶大风暴。据了解,《狂…...
博客排名的影响是什么? 说明优点、注册方法和推荐网站
如果您经营博客,您是否在博客排名网站上注册?博客排名网站是以排名格式介绍各种注册博客的网站。如果您注册博客,您将有更多机会被人们看到,并且可以期望增加访问权限。对于那些刚刚打开博客并担心访问量不会轻易增加的人来说&…...
全流程GMS地下水数值模拟技能培养及溶质运移反应问题深度解析实践技术
本次综合前期多次学习的效果及重点关注环节,系统性呈现地下水数值模拟软件GMS建模方法同时,建立与实践项目过程中的重点问题相融合,在教学中不仅强调学习三维地质结构建模、水文地质模型概化、边界条件设定、参数反演和模型校核等关键环节&am…...
【软件架构设计】SOA/软件架构设计---面向服务的架构(SOA详细解释)
文章目录面向服务的架构SOA 概述1. 服务的基本结构2.SOA 设计原则3. 服务构件与传统构件SOA 的关键技术1. UDDI2.WSDL3.SOAP4.RESTSOA 的实现方法1.Web Service2. 服务注册表3. 企业服务总线微服务1.微服务的优势2. 微服务面临的挑战3.微服务与 SOA面向服务的架构 迄今为止&am…...
erupt框架Ueditor富文本编辑器图片上传出现405异常
最近在研究erupt框架(v1.11.2),当字段使用Ueditor富文本编辑器,在图片上传的时候出现405异常,接口不支持POST请求方式: 根据错误提示找到对应的源码,发现Handler方法只支持GET请求,而图片上传的时候是以POST方式发起请求的; 此时需要修改源码,用自定义的类覆盖jar包中同名的…...
FILE文件操作
文件指针 每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名 字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统 声明的,取名FILE…...
SAP PP工单确认完成(CNF)状态取消方法
这SAP PP工单确认完成(CNF)状态取消方法SAP PP工单确认完成(CNF)状态取消方法SAP PP工单确认完成(CNF)状态取消方法 工单完工后取消了其中的一个报工,然后无法再报工 此时再报工,系…...
Python 采集 筷 实现视频批量保存
前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~! 刷到的视频怕它下架?我们来采集保存一下它 知识点: 动态数据抓包 requests发送请求 json数据解析 开发环境: python 3.8 运行代码 pycharm 2022.3 辅助敲代码 requests pip install requests 代码展示 需…...
关于linux下环境配置遇到的坑
1、输入终端命令和vi时,一定要确认是英文输入法! 比如中英文输入下的短杠号“-”是不同的,虽然看起来一样。如果是中文输入法下输入含有短杠号的命令,会导致很多意料之外的错误。比如在用sudo ln -s 创建软连接时,会提…...
【Azure 架构师学习笔记】-Azure Logic Apps(7)- 自定义Logic Apps 调度
本文属于【Azure 架构师学习笔记】系列。 本文属于【Azure Logic Apps】系列。 接上文【Azure 架构师学习笔记】-Azure Logic Apps(6)- Logic Apps调用ADF 前言 在稍微了解Logic Apps的使用之后,需要开始考虑如何调度起来。在Logic Apps里面…...
ubuntu20.04配置UR机械臂的仿真环境
ubuntu20.04配置UR机械臂的仿真环境 参考链接 1. 首先安装好ROS ubuntu20.04安装Noetic版本的ros,具体安装可见之前写的博客 2. 配置UR机械臂仿真工具包 找一个你喜欢的地方创建ros工作空间(也就是找个文件夹放ros的包,然后编译运行&…...
雅利安人覆灭了世界三大文明,为何单单在商朝被斩首两万?
转自:雅利安人覆灭了世界三大文明,为何单单在商朝被斩首两万? (baidu.com)在公元前3000年至1000年的广大时间内,是世界四大文明古国大放光彩的时候,古印度文明、古巴比伦文明、古埃及文明以及我们的古华夏,…...
Windows 系统上查询 GPU / CPU 对 Vulkan 的支持信息
Windows 系统上查询 GPU / CPU 对 Vulkan 的支持信息1. TechPowerUp GPU-Z https://www.techpowerup.com/gpuz/ GPU-Z is a lightweight system utility designed to provide vital information about your video card and graphics processor. GPU-Z 是一款显卡识别工具&…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
【网络安全产品大调研系列】2. 体验漏洞扫描
前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
Web 架构之 CDN 加速原理与落地实践
文章目录 一、思维导图二、正文内容(一)CDN 基础概念1. 定义2. 组成部分 (二)CDN 加速原理1. 请求路由2. 内容缓存3. 内容更新 (三)CDN 落地实践1. 选择 CDN 服务商2. 配置 CDN3. 集成到 Web 架构 …...
【Android】Android 开发 ADB 常用指令
查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...
【前端异常】JavaScript错误处理:分析 Uncaught (in promise) error
在前端开发中,JavaScript 异常是不可避免的。随着现代前端应用越来越多地使用异步操作(如 Promise、async/await 等),开发者常常会遇到 Uncaught (in promise) error 错误。这个错误是由于未正确处理 Promise 的拒绝(r…...
Unity中的transform.up
2025年6月8日,周日下午 在Unity中,transform.up是Transform组件的一个属性,表示游戏对象在世界空间中的“上”方向(Y轴正方向),且会随对象旋转动态变化。以下是关键点解析: 基本定义 transfor…...
高考志愿填报管理系统---开发介绍
高考志愿填报管理系统是一款专为教育机构、学校和教师设计的学生信息管理和志愿填报辅助平台。系统基于Django框架开发,采用现代化的Web技术,为教育工作者提供高效、安全、便捷的学生管理解决方案。 ## 📋 系统概述 ### 🎯 系统定…...
英国云服务器上安装宝塔面板(BT Panel)
在英国云服务器上安装宝塔面板(BT Panel) 是完全可行的,尤其适合需要远程管理Linux服务器、快速部署网站、数据库、FTP、SSL证书等服务的用户。宝塔面板以其可视化操作界面和强大的功能广受国内用户欢迎,虽然官方主要面向中国大陆…...
安宝特方案丨从依赖经验到数据驱动:AR套件重构特种装备装配与质检全流程
在高压电气装备、军工装备、石油测井仪器装备、计算存储服务器和机柜、核磁医疗装备、大型发动机组等特种装备生产型企业,其产品具有“小批量、多品种、人工装配、价值高”的特点。 生产管理中存在传统SOP文件内容缺失、SOP更新不及、装配严重依赖个人经验、产品装…...
