当前位置: 首页 > news >正文

【学习笔记】「北大集训 2021」经典游戏

我觉得很厉害。要是考场上能把这道题切了的话数据结构的水平肯定是不低的。

考虑简化版问题:如果只询问一个点的答案怎么做。

注意,我这么做是有风险的。我把战线拉长了。不过当然,如果连简化版的问题都做不了,那何谈正解?幸运的是,这确实是一道数据结构多合一的题。

考虑 长链剖分 。那么在 x x x节点上加入棋子时,子树外的点就异或上 x x x子树的最大深度,如果以 x x x为根的最长链在重儿子上面,那么就给除了重儿子外的子树打标记,注意到 dfn \text{dfn} dfn序是连续的 ,可以直接打标;对于重儿子也可以直接对整颗树打标,只需处理出 x x x去掉重儿子后的最长链长度即可;如果最长链在父亲上,那么直接对 x x x整颗子树修改即可。

发现了吗?经过细致分析,我们发现这道题其实并不复杂。当然要建立在想到长链剖分的基础上。

这题更神奇的地方在于,让我们求 dist(x,v) ≤ 1 \text{dist(x,v)}\le 1 dist(x,v)1的所有根的答案。这是个非常恼人的限制,因为你知道会被菊花图卡,但是不知道会被卡成多少分。

有没有严格的做法呢?答案是有的。但是我一定想不到。 但是需要用到非常高级的技巧。其实说白了,询问可以拆分成 x x x x x x的父亲, x x x的重儿子以及 x x x的所有轻儿子。如果一次插入影响到点的数目是 O ( 1 ) O(1) O(1)那么我们的目的就达到了。

考虑这样一个问题,如何用字典树维护 c i ⊕ x > d i c_i\oplus x>d_i cix>di的所有点对?这个问题也非常具有迷惑性。因为 d i d_i di是定值, x x x又是每次询问给定的,那么维护 c i c_i ci然后在 trie \text{trie} trie树上查不就完了?并且 trie \text{trie} trie树查询的复杂度也是 log ⁡ n \log n logn的。这样分析下来觉得越来越有道理了,但是考场上完全想不到这里来啊???

初始化的时候 c i c_i ci都是定值。手动分讨一波,如果最长链在重儿子上面那么 x x x的所有轻儿子都异或上同一个数,直接在 x x x上打标就完了;如果最长链在父亲上面那么轻儿子还是异或上同一个数。事实上可以发现,任意时刻轻儿子的标都和这个点上的标是一样的,唯一的例外是当插入的点就是这个轻儿子的情况。但是正如前所说,修改影响到的节点数目是 O ( 1 ) O(1) O(1)的,所以直接在 trie \text{trie} trie树上暴力修改就行。然后就做完了。

所以发现了吗?这种题逻辑链条太长了。其实思维难度并不大。

复杂度 O ( n log ⁡ n ) O(n\log n) O(nlogn)

要考虑的细节挺多了。所以代码先咕了。

http://www.lryc.cn/news/65465.html

相关文章:

  • 优惠卷秒杀功能、全局唯一ID、乐观锁解决超卖问题、悲观锁实现一人一单、集群下锁失效问题
  • Nest的基本概念,以及如何使用Nest CLI来构建一个简单的Web应用程序
  • 15个创新世界119座城:1~10章音频
  • AI面试必刷算法题 附答案和解析 --持续更新中
  • 聊一聊 GDB 调试程序时的几个实用命令
  • MySQL驱动对MYSQL进行update操作时返回值注意UseAffectedRows
  • OpenCV-Python图像几何变换
  • 国民技术N32G430开发笔记(15)- IAP升级 树莓派串口发送数据
  • svo论文解读
  • DolphinScheduler海豚调度教程
  • ubuntu脚本解释器踩坑:#!/bin/bash 与 #!/bin/sh
  • 小松鼠踩一踩游戏
  • 使用crontab命令同步时间
  • TortoiseGit提示No supported authentication methods available异常
  • 基于哈希表的用户管理系统
  • GO数组切片-线性数据结构
  • C++ STL学习之【优先级队列】
  • keepalived脑裂现象
  • [stable-diffusion-art] 指北-1
  • 「C/C++」C/C++预处理器
  • java语言入门教程文章
  • 基于灰狼算法的极限学习机(ELM)回归预测-附代码
  • 【五一创作】ERP实施-委外业务-委外采购业务
  • DAY 54 数据库基础
  • 网络编程 总结二
  • 消息称苹果Type-C口充电未设MFi限制,iOS17将更新Find My服务
  • 设计模式——工厂模式(简单工厂、工厂方法、抽象工厂)
  • 《C语言技术体系》 学习路线总目录 + 思维导图
  • 数字图像处理简答题
  • 【Java校招面试】基础知识(五)——GC