AH2022 钥匙

news/2025/10/30 21:18:10/文章来源:https://www.cnblogs.com/xhr0817-blog/p/19178159

钥匙

洛谷 P8339

钦定当有很多把钥匙能打开开宝箱时使用最后拿到的一把(应该要想想用第一把打开,实际不好做。)

每种颜色 \(col\) 的钥匙和宝箱是互相独立的,可以对每种颜色建出虚树。对于一把钥匙 \(u\),以它为根进行搜索,记录一个值 \(c\)。碰到颜色为 \(col\) 的钥匙 c++,碰到颜色为 col 的宝箱 c--,当到达 \(v\)\(c\) 第一次变成 \(0\) 就说明 \(u\) 打开 \(v\) 了(这也时为什么钦定最后一把打开 \(v\),否则可能时 \(u\) 另一棵子树内的钥匙打开 \(v\))。

因为每种颜色只有 \(5\) 把钥匙,总共只有 \(5n\)\((u, v)\)

现在问题就转化为了 \(s\)\(e\) 的路径会经过多少对 \((u, v)\),这和 HNOI2015 接水果 一样的。考虑 \((u, v)\) 会对哪些 \(s, e\) 做贡献,分讨一下 \(u, v\) 是否为祖孙关系,发现 \(s, e\)dfs 序分别在 \(1/ 2\) 个区间内,转化为二维数点问题树状数组做即可。

时间复杂度:\(O((5n + m) \log (5n + m))\),常数还是不小的,似乎要把 \((u, v)\) 拆成至多 \(4\) 个算,注意空间。


总的来说,这个题要想到钦定哪把钥匙来开当前的宝箱(无非两种,都试试吧),然后建出虚树求出 \((u, v)\)。就转化为了一个子问题,做过原题还是不难想到接下来怎么做的,就是把它拍到 dfs 序上然后二维数点。

虚树可以利用在这种若干个互不干扰的问题上,这种路径包含问题转化为二维数点也是一个经典套路吧。

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

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

相关文章

在国内体验 Claude Code 编程助手的可行方案 —— 我的 Evol AI 工作空间实践分享

前言 一直以来,我都在寻找一个能真正提升开发效率的 AI 编程助手。 我曾用过 GitHub Copilot,补全效果不错,但在处理复杂需求、跨文件逻辑时能力不足。后来了解到 Anthropic 的 Claude Code——支持超长上下文(200…

应用安全 --- vmp 之 代码虚拟化

应用安全 --- vmp 之 代码虚拟化所谓代码虚拟化就是用汇编指令模拟cpu的运行方式实现了一套软件虚拟机处理引擎和需要执行的虚拟化字节码 有点类似java和net的实现原理。 他们不同点就是代码虚拟化vmp是为了保护代码的…

Flask 入门:轻量级 Python Web 框架的快速上手 - 指南

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

Java第二天

十类型转换 自动类型转换:小范围可以自动转换为大类型表达式的类型转换:不同的类型相加结果要用最大的那个类型来接收。、强制类型转换:大范围不能直接赋值给小范围。但是通过强制转换是可以的,但是会失真,例如一…

八、认识for循环

1.for循环的概念 循环结构是指在程序中需要反复执行某个功能而设置的一种程序结构。如果条件满足,则重复执行相应的语句,当条件不满足,退出循环。 2.for循环的基本格式 for( 循环变量的初值; 循环条件; 循环变量的增…

CCUT应用OJ——小龙的字符串函数

题目简介题源:1073 - 小龙的字符串函数 | CCUT OJ 题意:给定 \(n\) 个等长字符串,定义函数 \(f(s_i,s_j)\) 表示字符串 \(s_i\) 与 \(s_j\) 中位置和字符相同的总数。输出 \(\sum f(s_i,s_j)\) ( 其中 \(i<j\) )…

OceanBase系列---【oceanbase的oracle模式新增分区表】

OceanBase系列---【oceanbase的oracle模式新增分区表】TIPS分区选择建议 按天分区: 适用于数据量极大(每天千万级以上)、需要频繁删除历史数据的场景 按月分区: 适用于数据量中等(每月百万到千万级)、最常用的分区方式…

cursor 数据路径 防止试用账号误删数据

C:\Users\xxx\.cursor C:\Users\xxx\AppData\Local\Programs\cursor C:\Users\xxx\AppData\Roaming\Cursor C:\Users\xxx\AppData\Roaming\Cursor\User 备份这个路径就行

Bettercap(中间人攻击神器)

Bettercap(中间人攻击神器)https://github.com/bettercap/bettercap/releaseshttps://github.com/bettercap/bettercap/releases/download/v2.41.4/bettercap_windows_amd64.zip 安装完运行会提示缺少 libusb.dll ht…

PHP代码加密方法

1. 新建一个 待加密的php文件:/routes_plain.php 注意不要带“<?php” var_dump(666);2.新建运行加密的文件: /jiami.php $plain = file_get_contents(__DIR__ . /routes_plain.php); // 压缩 + base64 $payload…

why is making friends, love bad

any relationship will let one be unreasonable.

DP题解

[P6772 [NOI2020] 美食家] (https://www.luogu.com.cn/problem/P6772) ZAK解题思路 蒟蒻语 wtcl, 只会最简单的题目 这道题目与 [P6569 NOI Online #3 提高组]魔法值(民间数据) 类似, 都是倍增优化矩阵乘法。 蒟蒻解…

逆序对略解

逆序对 定义 在一个数列中,如果前面的数字大于后面的数字,那么这两个数字就构成了一个逆序对 求逆序对 有3种方法:暴力,归并排序,线段树 1.暴力算法 枚举i和j(i<j),并判断是否满足a[j]<a[i] for(int i=1;i…

解码Shell 脚本编程

Shell 脚本基础 编程语言的分类 编程语言主要分为编译型语言和解释型语言,核心区别在于代码执行前是否需要 “编译” 步骤:类型 核心特点 优势 劣势 典型例子编译型语言 用平台相关编译器将源码一次性翻译成机器码(…

第10天(中等题 滑动窗口)

打卡第十天 2道中等题两个函数: 1.ans = move(t) 是将字符串 t 的内容转移给 ans,而不是进行拷贝。 详细2.substr 是 C++ 字符串的标准成员函数,用于从原字符串中提取子串。 详细 函数原型: string substr(size_t po…

树形dp部分题目总结

树形dp树形dp还是太难了 No.1 P2664 树上游戏 题目直接点开即可,这里不再赘述 我们发现其实直接统计每条路径上的颜色个数并不好统计,即使拆开贡献也是如此 举个例子,你要统计一个节点的贡献,那么你的贡献区间是不…

人工智能之编程基础 Python 入门:第三章 基础语法

人工智能之编程基础 Python 入门:第三章 基础语法人工智能之编程基础 Python 入门 第三章 基础语法@目录人工智能之编程基础 Python 入门前言一、基本语法第一个程序编码标识符行与缩进注释运算符一、算术运算符(Ari…

模块-文本

模块-文本模块:__init__文件中经常方常用的模块名用于快速导入 匿名函数递归:函数自己调用自己的写法叫递归异常处理 try: except excption as e:(报错执行) else: (没报错执行) finally:(无论是否报错都执行)

oier的呻吟

题记: 得之我幸,失之我命哎,马上就要考csp-j/s了 总感觉没复习好,啥都不会 好累 赛前遗言 如果这次没上,也不知道以后会有没有机会碰oi 那个oier曾没有远大的志向 突然想到那一句话 得之我幸,失之我命可能明后天…