如果你 #4 的第 85 行错误,可能是由如下原因导致的:
- 本题中经过 u 的合法路径有两种,一种是路径的两端点分别来自 u 的两颗不同子树,另一种是一个点为 u,另一个点为 u 的儿子。
- 如果 WA#4,大概率是第二种情况的统计出现错误。比如第二种情况出现的条件是 u 这个点的灯是熄灭的,u 这个点亮的时候不能计算这种情况。
如果 TLE#10:
- 先把倍增求 LCA 换成树剖,能快大概 1s 左右。
- 加上快读快输(作用不大,能快 0.2s 左右)。
- 如果你用
multiset 实现的,把 multiset 换成两个 priority_queue,这样可以快一倍。具体的实现方法就是一个堆维护所有的数,删除的时候在删除堆里插入该数字,别的帖子里也有所提及。
- 加上如上三条大部分大常数淀粉树就可以通过了,但是这个题还有 QTree4 的两个加强版,spoj 上的那个 QTree4 还是比较卡常,我们还可以继续优化。
- 发现一次修改操作虽然可能没有改变最大值,但是我们还是在两个堆内插入了一个相同的数字,相当于啥也没干,却让程序跑的很慢,我们可以特判掉这种情况。
希望如上的这些建议能够给后人提供一些帮主,楼主最开始写的极大常数淀粉树跑了 11s 多(总用时),再加了上述优化后只跑了 2s 多。
虽然我的卡常技艺还是比较差,但希望能给和我一样的大常数的 oier 一些帮助。QwQ