系统设计
看这篇题解
然后题解里面是边分区间边进行hash,我的代码是先分出区间再进行hash,可以想一下题解的代码主要怎么写
然后特别注意,如果手写hash表,会出很大的问题。首先这道题目的内存空间有限,三哈希及以上都不太可能,即使二哈希但是手写hash表的缘故,两个不同的hash值在两个hash表里面都插入了同一个头节点,这样也会导致答案出错,这样很难用某些trick避免
所以我们尝试利用单hash+unordered_map(这里直接用map会超时),单hash的种子像题解一样用2e6+3就没有问题了
update 2024.7.27
这种树哈希就可以用到树形态不变,记录根到节点的路径的情况
update 2026.2.20
重新做的时候想到了最关键的思路,就是将一个点表示成一个序列(从根节点走到这个点的路径作为一个序列),然后就可以去做哈希了
思路历程是,首先将条件变弱,操作一有三个变量,现在假设\(x\)是固定的,那么我们显然可以预处理出\(x\)子树中每个点的序列(也就是从\(x\)怎么走到这个点),于是再去询问就是做序列的匹配,可以KMP也可以哈希;现在假设\(x\)不固定,但是仍然有一个固定量,就是根节点到\(x\)的路径可以预处理,然后就是做路径的拼接,这就是哈希的经典操作了
但是对线段树不是很熟悉了,所以不知道修改操作怎么做
可以仔细看看上面的对哈希的修改操作以及线段树二分

浙公网安备 33010602011771号