CF246E bfs 序上莫队

news/2025/11/21 15:49:14/文章来源:https://www.cnblogs.com/lymsHz17/p/19253346

来篇莫队,支持正义根号。

发现是数颜色,这不是我们莫队的经典题目吗,所以考虑莫队。

发现 \(k\) 级儿子挺好,这给出了两个性质,分别在 bfs 序和 dfs 序上。

  1. bfs 序上,同一子树内深度相同的点相邻。
  2. dfs 序上,可以把子树问题拍成区间问题。

你就把树拍成 dfs 序再拍成 bfs 序,借助 dfs 序的帮助在子树区间内查询深度为某值的点的 bfs 序的区间,然后你就把这个问题转化为了完全的区间问题。

然后就可以美美的跑莫队了!!!

总复杂度 \(O(n\sqrt m)\)

话说跑主席树是不是 \(O(m\log n)\) 来着……

code:

// code by 樓影沫瞬_Hz17
#include <bits/stdc++.h>using namespace std;const int N = 2e5 + 10, B = 340;int n, m;int nxt[N * 2], hd[N], to[N * 2], cne;inline void add(int u, int v) { nxt[++ cne] = hd[u], to[cne] = v, hd[u] = cne; }int id_dfs, id_bfs;
int dfn[N], dep[N], sz[N], rdfn[N];
inline void dfs(int u, int f) { // 拍成 dfs 序dfn[u] = ++ id_dfs, sz[u] = 1;rdfn[id_dfs] = u;dep[u] = dep[f] + 1;for(int i = hd[u]; i; i = nxt[i]) {int v = to[i];dfs(v, u);sz[u] += sz[v];}
}int bfn[N];
inline void bfs() { // 拍成 bfs 序queue<int> q; q.push(0);while(!q.empty()) {int u = q.front(); q.pop();bfn[u] = ++ id_bfs;for(int i = hd[u]; i; i = nxt[i]) q.push(to[i]);} 
} struct Que {int l, r, id;
} q[N];
int Q, ans[N], pos[N];int a[N], b[N];
int cnt[N], sum;vector<int> st[N];
inline void calc_query() { // 处理询问for(int i = 1; i <= n + 1; i ++) st[dep[rdfn[i]]].push_back(i);for(int i = 1, v, k; i <= m; i ++) {cin >> v >> k;int l1 = dfn[v], r1 = dfn[v] + sz[v] - 1;auto itl = (lower_bound(st[dep[v] + k].begin(), st[dep[v] + k].end(), l1));auto itr = (upper_bound(st[dep[v] + k].begin(), st[dep[v] + k].end(), r1) - 1);if(itl == st[dep[v] + k].end() || itr < st[dep[v] + k].begin() || *itl > *itr) {ans[i] = 0;continue;}int l = *itl, r = *itr;l = rdfn[l];r = rdfn[r];l = bfn[l];r = bfn[r];q[++ Q] = {l, r, i};}for(int i = 1; i <= n; i ++) b[bfn[i]] = a[i]; 
}map<string, int> mp;
int cntn;int main() { ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);cin >> n;int rt = 0;string s;for(int i = 1, f; i <= n; i ++) {cin >> s >> f;add(f, i);if(!mp[s]) mp[s] = ++ cntn;a[i] = mp[s];}dfs(rt, rt);bfs();cin >> m;calc_query();for(int i = 1; i <= n; i ++) pos[i] = (i - 1) / B + 1;sort(q + 1, q + 1 + Q, [pos](Que a, Que b) { return pos[a.l] == pos[b.l] ? pos[a.l] & 1 ? a.r < b.r : a.r > b.r : pos[a.l] < pos[b.l]; });for(int i = 1, l = 1, r = 0; i <= Q; i ++) {while(l < q[i].l) sum -= !-- cnt[b[l ++]];while(l > q[i].l) sum += !cnt[b[-- l]] ++;while(r < q[i].r) sum += !cnt[b[++ r]] ++;while(r > q[i].r) sum -= !-- cnt[b[r --]];ans[q[i].id] = sum;}for(int i = 1; i <= m; i ++) cout << ans[i] << '\n';return 0;
}

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

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

相关文章

2025 年 11 月降本增效管理咨询公司推荐排行榜,降本增效咨询,企业降本增效,提质增效咨询机构,专业实力与客户满意度深度解析

2025年11月降本增效管理咨询公司推荐排行榜,降本增效咨询,企业降本增效,提质增效咨询机构,专业实力与客户满意度深度解析 在当前经济环境下,企业面临着日益严峻的成本压力和效率挑战。降本增效管理咨询服务作为提…

小型食品厂省心了!CLC-S22R 控温又省成本​

开小型面包房、酱菜厂、豆制品厂的老板们,是不是总被 “温度”“湿度” 愁得睡不着?烘焙面包要精准控温,差 2 度就烤焦;腌酱菜要稳定湿度,潮了容易坏;这些参数靠人工盯,不仅累,还总出错,一批货废了就是几千块…

质量基石:读懂检查表,用好数字化管理利器

在企业运营与质量管理中,我们总在寻找一种简单而有效的方法,能将复杂的问题条理化,将模糊的感觉数据化。检查表,正是这样一款基石性的工具。 一、什么是检查表? 核心定义:检查表,又称调查表、核对表,是一种为了…

P4148 简单题 模板题分析

供自己复习使用,因此只贴代码。 题目链接:https://www.luogu.com.cn/problem/P4148。 代码 时间复杂度 \(\mathcal{O}(n\sqrt n)\)。 #include <iostream> #include <cstdio> #include <stdlib.h>…

【压测数据分享】VictoriaLogs 中的参数 `inmemoryDataFlushInterval` 对写入性能的影响

【压测数据分享】VictoriaLogs 中的参数 `inmemoryDataFlushInterval` 对写入性能的影响作者:张富春(ahfuzhang),转载时请注明作者和引用链接,谢谢!cnblogs博客 zhihu Github 公众号:一本正经的瞎扯inmemoryDataFlu…

Windows系统增强神器!PowerToys微软官方效率工具(实操v教程)!

PowerToys 就是微软官方为解决这些痛点而开发的增强工具集!它集成了20+个实用工具,完全免费开源,让你的Windows使用体验更上一层楼。软件下载 PowerToys拓展工具箱 ​​ 软件使用教程 安装完成后,PowerToys会显示其…

Linux内核实验-ubuntu

​✅实验环境 vmware workstation 17 ubuntu24.04下载链接: https://old-releases.ubuntu.com/releases/24.04/ ✅实验目的 为了解决日常环境部署中某些驱动软件依赖特定内核版本,此教程实验,用于内核版本的调整实…

2025年11月四川自习室加盟市场分析与品牌推荐

2025年11月四川自习室加盟市场分析与品牌推荐近年来,共享Ai自习室在四川等多个省份逐渐兴起,成为许多创业者关注的项目。面对不同的自习室加盟/代理品牌,许多初次接触这个行业的朋友会感到困惑:这些自习室加盟/代理…

2025年电极生产厂家权威推荐榜单:航空插头/马达壳/插针源头厂家精选

在工业制造智能化、精密化转型的背景下,电极作为电子元器件、航空航天、汽车制造等领域的关键部件,其技术水平和产品质量直接影响设备性能与可靠性。据行业数据显示,2024年中国电极产业市场规模持续增长,其中高端精…

2025 最新推荐装盒机厂家权威排行榜:全自动 / 食品 / 纸巾 / 卫生巾装盒机技术创新与整线配套能力测评

引言 在全球包装工业化升级进程中,装盒机作为后道包装核心设备,其性能稳定性、智能化水平与整线适配能力已成为企业提升生产效率、保障产品品质的关键。据国际包装机械协会(IPMA)最新测评数据显示,全球装盒机市场…

P9433 [NAPC-#1] Stage5 - Conveyors 分析

感觉是经典题目。 题目概述 给出一个有 \(n\) 个点并且其中有 \(k\) 个关键点的无根树,要求从 \(s\) 走到 \(t\) 途中必须包含这 \(k\) 个关键点,求最短路径。 分析 考虑以一个关键点作为根。 由于这道题目 \(s,t\) …

我发现上大学虚构痛苦是件非常愚蠢的事

最近在图书馆刷夜时突然想通一个道理:大学比高中焦虑,其实是因为选择太多了。高中时只有高考这一条路,而现在的我们,面前摆着无数条路,却不知道哪条能走通。 看着身边同学拿国奖、竞赛获奖,自己却普普通通;纠结…

Qt 实现“可点击跳转”的 QSlider

在 Qt 开发中,QSlider 是最常用的滑块控件之一,但很多人都会遇到一个让人抓狂的问题:默认的 QSlider 点击滑块以外的区域时,滑块只会往前/往后跳一小步(page step),而不是直接跳转到点击的位置。这在音频播放器…

技术架构进化论:从“独栋别墅”到“智慧城市”

想象一下,你要解决住宿问题。技术架构的演进,就完全复制了这个过程。 一、从单体架构到微服务演进:从“独栋别墅”到“现代化小区”单体架构 (Monolith) —— 最初的“独栋大别墅” 是什么: 把所有功能——用户管理…

STM32项目分享:基于STM32的酒店送餐小车的设计与搭建

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

2025 年最新推荐套袋机厂家权威榜单:聚焦技术创新与专利优势,覆盖多品类设备选型指南M 型袋套袋机/预制袋套袋机/袋中袋套袋机/食品套袋机/八边封套袋机公司推荐

引言 在全球包装行业智能化转型的关键阶段,套袋机作为后道包装核心设备,其技术成熟度、自动化水平与适配能力成为企业提升生产效率的核心抓手。当前市场设备质量差异显著,部分厂商存在研发投入不足、稳定性欠佳、定…

Galera Cluster部署 - 详解

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

模拟机问题

Android 模拟器运行问题总结与解决方案 🎯 项目概述 项目类型: Cordova 混合应用 目标平台: Android 主要工具: Android Studio, Cordova CLI, Gradle 🔥 遇到的主要问题及解决方案 问题 1: 环境变量配置错误 症状…

UBUNTU22.04,配置wine中调用cuda

​实验目标 客户要求: 有一个程序需要运行在云服务器上,云服务器为云容器,云容器操作系统类型为linux,程序包是基于windows环境开发的,且程序需要调用英伟达的GPU做运算,云容器不能支持虚拟化,于是乎,考虑搭建…

macos制作可以启动的iso引导文件

​环境需要一个macos系统,实体机或者虚拟机环境,下载macos镜像 官方链接:https://support.apple.com/zh-cn/102662 这里下载的是macos Sonoma14 链接如下,贴入到macos的浏览器,会自动跳转但app store 会自动下载 …