P5556 圣剑护符 题解
本题做法:树链剖分 + 线性基。
下面默认读者学会了树链剖分与线性基。
首先对于 Query 操作,我们需要转化一下题意:对于路径上的点而言,是否能够选出一些点,使得这些点点权异或值为 0。
这么做的理由是因为如果不存在这样的点集,那么就不会出现两个不相同的集合其异或值相同。
看到异或值询问是否有 0,这是线性基的基本操作:如果有数插入失败,这说明有点集异或结果为 0。
因为点权的值域是 ,在这个值域范围下线性基的个数至多只有 30 个,因此对于所有路径大于 30 的询问全部都是 YES
。
小于等于 30 的询问呢?由于点数只有 30 个,显然可以暴力查找路径上的点,加入线性基即可。
对于 Update 操作,在树剖之后直接维护线段树,Update 即可。
对于 Query 操作,上面已经详细讲过了,只不过往线性基中加数的时候需要在线段树中单点查询。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具