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 是一款显卡识别工具&…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)
文章目录 1.什么是Redis?2.为什么要使用redis作为mysql的缓存?3.什么是缓存雪崩、缓存穿透、缓存击穿?3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...
Java多线程实现之Callable接口深度解析
Java多线程实现之Callable接口深度解析 一、Callable接口概述1.1 接口定义1.2 与Runnable接口的对比1.3 Future接口与FutureTask类 二、Callable接口的基本使用方法2.1 传统方式实现Callable接口2.2 使用Lambda表达式简化Callable实现2.3 使用FutureTask类执行Callable任务 三、…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...
vue3 定时器-定义全局方法 vue+ts
1.创建ts文件 路径:src/utils/timer.ts 完整代码: import { onUnmounted } from vuetype TimerCallback (...args: any[]) > voidexport function useGlobalTimer() {const timers: Map<number, NodeJS.Timeout> new Map()// 创建定时器con…...

零基础设计模式——行为型模式 - 责任链模式
第四部分:行为型模式 - 责任链模式 (Chain of Responsibility Pattern) 欢迎来到行为型模式的学习!行为型模式关注对象之间的职责分配、算法封装和对象间的交互。我们将学习的第一个行为型模式是责任链模式。 核心思想:使多个对象都有机会处…...
【HTTP三个基础问题】
面试官您好!HTTP是超文本传输协议,是互联网上客户端和服务器之间传输超文本数据(比如文字、图片、音频、视频等)的核心协议,当前互联网应用最广泛的版本是HTTP1.1,它基于经典的C/S模型,也就是客…...
laravel8+vue3.0+element-plus搭建方法
创建 laravel8 项目 composer create-project --prefer-dist laravel/laravel laravel8 8.* 安装 laravel/ui composer require laravel/ui 修改 package.json 文件 "devDependencies": {"vue/compiler-sfc": "^3.0.7","axios": …...

搭建DNS域名解析服务器(正向解析资源文件)
正向解析资源文件 1)准备工作 服务端及客户端都关闭安全软件 [rootlocalhost ~]# systemctl stop firewalld [rootlocalhost ~]# setenforce 0 2)服务端安装软件:bind 1.配置yum源 [rootlocalhost ~]# cat /etc/yum.repos.d/base.repo [Base…...
Vite中定义@软链接
在webpack中可以直接通过符号表示src路径,但是vite中默认不可以。 如何实现: vite中提供了resolve.alias:通过别名在指向一个具体的路径 在vite.config.js中 import { join } from pathexport default defineConfig({plugins: [vue()],//…...