[CSP-S 2022] 星战
我为什么会在赛时想图论分块。。。。
什么神仙会想到哈希维护啊
首先手玩一下满足条件的图,只需要满足条件二:所有点出度为 1,条件 1 会自然满足,我们必然可以顺着其出边走下去。
对于操作 2 和 4,我们无法快速维护所有点的出度是否均为 \(1\),所以考虑把入度压成一个字符串,最后我们匹配是否与 \(111111...\) 相等。
看到这种大修改,整体判等的操作,hash 不失为一种优秀的方法。
我们给每个点随机一个权值 \(w_i\),那么整个串就是 \(\sum_{i=1}^{n} w_i\times in_i\),其中 \(\sum\) 可以是异或和、正常求和、\(p\) 进制下和等。
对于单边修改,暴力即可。
对于修改一个点 \(x\) 的所有入边,考虑先预处理出 \(a_x=\sum_{(y, x)\in G} w_y\),我们将上次整体修改 \(x\) 到这次操作之间所有关于 \(x\) 的操作逆回去,然后减去/加上 \(a_x\),这样均摊复杂度 \(O(m)\)。
那么这题就做完了。。。
code 用的是异或和。