W
e
l
c
o
m
e
: )

[CSP-S 2022] 星战

link

我为什么会在赛时想图论分块。。。。

什么神仙会想到哈希维护啊

首先手玩一下满足条件的图,只需要满足条件二:所有点出度为 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 用的是异或和。

posted @ 2022-10-30 22:08  127_127_127  阅读(175)  评论(0编辑  收藏  举报