CF1172E Nauuo and ODT

发布时间 2023-03-27 18:56:47作者: 275307894a

题面传送门

还是见识太少了。

直接算颜色个数不好算,因为是和式,所以考虑计算某个颜色的贡献。

对于某个时刻,有一些位置是当前时刻,那么设所有没有这些位置的联通块平方和为 \(S\) ,则贡献为 \(n^2-S\)

因为总共有效的修改只有 \(O(m)\) 个,因此我们需要支持:改变一个点的状态,查询为 \(1\) 的点的联通块的平方和。

可以仿照 QoT VI 用 LCT 维护。具体的,我们维护每个点和其父亲的边,如果这个点处于激活状态,那么这条边存在。一个点所在的联通块就是这个点 LCT 上联通块刨掉最浅的节点之后这个点所在的联通块。这样转化的好处就是对于每次修改,只需要修改 \(O(1)\) 条边的状态。对于 LCT 上每个点,只需要维护虚子树大小和虚子树平方和就可以维护出每次变化答案的变化量,然后前缀和就可以得到每个询问的答案。

时间复杂度 \(O(m\log n)\) ,某些出题人指望这东西在 1s 内跑过 \(5\times 10^6\) 次对 \(10^4\) 的树的修改,我不说是谁。

submission