题解 CF246E【Blood Cousins Return】

题解 CF246E【Blood Cousins Return】

题目描述

给定一片森林,每个点有一个名字(字符串)。每次查询一个节点的子树中离他距离为 \(k\) 的点中有多少种不同的名字。\(n, m\leq 10^5\)

solution

将所有名字离散化。考虑在算答案的时候,我们钦定同一种颜色只有 bfs 序最小的才能被计算。对于每个点,找出与它深度相同的,bfs 序在他前面的,颜色也与它相同的点。求出这两个点的 LCA,然后在这个点本身的这个深度上打一个 \(+1\) 标记,在 LCA 处的这个深度上打一个 \(-1\) 标记,表示在 LCA 处颜色出现了重复,减去自己,用前面与它颜色相同的点为这个颜色的代表进行计算。然后做长链剖分即可。

如果用线性的 LCA 算法,并忽略离散化部分,那么时间复杂度为 \(O(n)\)

code

#include <bits/stdc++.h>
using namespace std;
#ifdef LOCAL
#define debug(...) fprintf(stderr, ##__VA_ARGS__)
#else
#define endl "\n"
#define debug(...) void(0)
#endif
using LL = long long;
constexpr int N = 1e5 + 10;
int n, col[N], fa[N], st[20][N], cnt, dfn[N], dep[N], hei[N], son[N], rnk[N];
map<string, int> mp;
basic_string<int> g[N];
bool cmp(int u, int v) { return dfn[u] < dfn[v]; }
void dfs0(int u) {son[u] = 0;for (int v : g[u]) dfs0(v), hei[v] > hei[son[u]] && (son[u] = v);hei[u] = hei[son[u]] + 1;
}
void dfs(int u) {dfn[u] = ++cnt, st[0][cnt] = fa[u], dep[u] = dep[fa[u]] + 1, rnk[cnt] = u;if (son[u]) dfs(son[u]);for (int v : g[u]) if (v != son[u]) dfs(v);
}
int lca(int u, int v) {if (u == v) return u;auto [l, r] = minmax(dfn[u], dfn[v]);int k = __lg(r - l);return min(st[k][l + 1], st[k][r - (1 << k) + 1], cmp);
}
basic_string<int> des[N];
int main() {
#ifndef LOCALcin.tie(nullptr)->sync_with_stdio(false);
#endifcin >> n;for (int i = 1; i <= n; i++) {string s;cin >> s >> fa[i];if (!mp.count(s)) mp.emplace(s, mp.size());col[i] = mp[s];g[fa[i]] += i;}dfs0(0);dfs(0);for (int j = 1; j < 20; j++) {for (int i = 1; i + (1 << j) - 1 <= cnt; i++) {st[j][i] = min(st[j - 1][i], st[j - 1][i + (1 << (j - 1))]);}}queue<int> q;q.push(0);while (!q.empty()) {int u = q.front(); q.pop();static int lst[N];int p = exchange(lst[col[u]], u);if (p && dep[p] == dep[u]) des[lca(u, p)] += dep[u];for (int v : g[u]) q.push(v);}static int f[N], fans[N];static vector<pair<int, int>> qry[N];int m;cin >> m;for (int i = 1, u, k; i <= m; i++) cin >> u >> k, qry[u].emplace_back(k, i);for (int j = cnt; j >= 1; j--) {int u = rnk[j];for (int v : g[u]) if (v != son[u]) {for (int i = 0; i < hei[v]; i++) f[dfn[u] + i + 1] += f[dfn[v] + i];}f[dfn[u]] += 1;for (int d : des[u]) f[dfn[u] + d - dep[u]] -= 1;for (auto [k, id] : qry[u]) if (k < hei[u]) fans[id] = f[dfn[u] + k];}for (int i = 1; i <= m; i++) cout << fans[i] << endl;return 0;
}

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

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

相关文章

到底是谁还没搞清楚 OMS 和 WMS的区别?

聊到 OMS(订单管理系统) 和 WMS(仓库管理系统),很多人第一反应是:“不就是订单和仓库嘛?谁还分不清?” 但等到真正操作的时候,很多企业就开始搞混了:“WMS 不是也能管库存吗?为什么还要 OMS?” “OMS 负责订单,那 WMS 发货的时候为啥还要管订单?” “库存到底是 …

VMware ESXi 8.0U2d macOS Unlocker OEM BIOS 标准版和厂商定制版

VMware ESXi 8.0U2d macOS Unlocker & OEM BIOS 标准版和厂商定制版VMware ESXi 8.0U2d macOS Unlocker & OEM BIOS 标准版和厂商定制版 ESXi 8.0U2 标准版,Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科)、Hitachi (日立)、Fujitsu (富士通)、…

当AI学会“读心”,浙大DeepSeek第三期掌握AI分布式学习,多场景下的「超级外挂」!

当AI学会“读心”,浙大DeepSeek第三期掌握AI分布式学习,多场景下的「超级外挂」!"当AI不仅能写诗画画,还能参与社会治理,我们的世界会变成什么样?"最近浙大的DeepSeek公开课第三期,直接把这个问题抛给了大众。这场线上讲座一边拆解大模型的技术内核、展示如何…

SecureCRT报错--文件名目录名或卷标语法不正确

SecureCRT版本:Version 7.0.0 (build 326)绿色版 1.错误展示2.解决办法 删除C:\Users\Administrator\AppData\Roaming\SecureCRT.dmp后重新解压

读DAMA数据管理知识体系指南12数据设计

数据建模工具、血缘、分析、元数据库等行业工具介绍,命名、数据库设计最佳实践,开发标准,评审质量,管理版本与集成,以及模型度量指标等关键方面。1. 工具 1.1. 数据建模工具1.1.1. 自动实现数据建模功能的软件1.1.2. 入门级数据建模工具提供基本的绘图功能,以便用户可以轻…

hive安装--远程模式

系统版本:CentOS Linux release 7.9.2009 (Core)ps: 最小化安装一、安装MySQL 1.下载 1.1安装包 官网:https://downloads.mysql.com/archives/community/1.2驱动 官网:https://downloads.mysql.com/archives/c-j/ps mysql-connector-java-5.1.47.jar,要这个2.安装 2.1安装依…

熟人挖锑矿项目个人参与, 融资部分资金(有效期 2025年3月- 2025年4月)

本人985,中南大学, 计算机行业工作。 平时偶尔看机缘投一些熟人之间的项目最近有熟人介绍一个项目 。熟人包了一个山,在东南亚那边, 山上发现有露天锑矿, 利润非常可观。 准备开挖,跟了很久,这个月(2025年3月-2025年4月) 开始,拉了几个人合伙投资,这个月或下个月…

photoshop 色彩平衡工具

色彩平衡工具作用于单个像素。 在不勾选保持明度的情况下,加红减青相当于直接增加像素的R值。相应的,加青减红相当于等比例降低G和B。 其他两项亦然。 也就是说,加红相当于直接在R通道上拉曲线。在勾选保持明度的情况下,加红减青会增加R值,降低G和B以保持明度不变。推测此…

从零到一打造商用AIAgent

这篇内容将从整体上介绍打造 AI Agent 的七个步骤,分别是需求梳理、软件选型、提示工程、数据库、构建 UI 界面、测试评估和部署发布。 梳理工作流 第一步,我们需要做的工作就是梳理需求。 首先,我们需要明确,做这个 AI Agent 是为了帮我们解决什么问题?如果你是一位自媒…

[AI/AIGC/LLM] 通义千问QwQ-32B: 阿里巴巴开源的、最新最强开源(推理)大模型 | Apache 2.0

序:2025年3月6日凌晨,阿里巴巴发布并开源全新的推理模型通义千问QwQ-32B。 通过大规模强化学习,千问QwQ-32B在数学、代码及通用能力上实现质的飞跃,整体性能比肩DeepSeek-R1。 在保持强劲性能的同时,千问QwQ-32B还大幅降低了部署使用成本,在消费级显卡上也能实现本地部署…

The Vendi Score: A Diversity Evaluation Metric for Machine Learning 论文笔记

介绍 我们基于生态学和量子统计力学的思想,提出了 Vendi 分数用来解决多样性评估问题 Vendi 分数不需要参考数据集或样本或标签的分布,因此它是通用的,适用于任何可以定义相似性的领域的生成模型、解码算法和数据集 创新 之前的多样性指标的适用性可能受到限制,因为它们需要…

MM-LLMs: Recent Advances in MultiModal Large Language Models 论文笔记

介绍 这是一篇多模态大模型的综述 MM-LLM面临的核心挑战是如何有效地将LLM与其他模式的模型连接起来以实现协作推理 建立了一个网站(https://mm-llms.github.io)来跟踪MM-LLM的最新进展并方便大家更新 模型架构冻结部分不可训练,未冻结部分是可训练的Modality Encoder:对不…