关于淀粉树 WA#4 或 TLE#10 的一些建议
查看原帖
关于淀粉树 WA#4 或 TLE#10 的一些建议
451328
lnwhl楼主2023/10/30 14:32

如果你 #4 的第 85 行错误,可能是由如下原因导致的:

  • 本题中经过 uu 的合法路径有两种,一种是路径的两端点分别来自 uu 的两颗不同子树,另一种是一个点为 uu,另一个点为 uu 的儿子。
  • 如果 WA#4,大概率是第二种情况的统计出现错误。比如第二种情况出现的条件是 uu 这个点的灯是熄灭的,uu 这个点亮的时候不能计算这种情况。

如果 TLE#10:

  • 先把倍增求 LCA 换成树剖,能快大概 1s 左右。
  • 加上快读快输(作用不大,能快 0.2s 左右)。
  • 如果你用 multiset 实现的,把 multiset 换成两个 priority_queue,这样可以快一倍。具体的实现方法就是一个堆维护所有的数,删除的时候在删除堆里插入该数字,别的帖子里也有所提及。
  • 加上如上三条大部分大常数淀粉树就可以通过了,但是这个题还有 QTree4 的两个加强版,spoj 上的那个 QTree4 还是比较卡常,我们还可以继续优化。
  • 发现一次修改操作虽然可能没有改变最大值,但是我们还是在两个堆内插入了一个相同的数字,相当于啥也没干,却让程序跑的很慢,我们可以特判掉这种情况。

希望如上的这些建议能够给后人提供一些帮主,楼主最开始写的极大常数淀粉树跑了 11s 多(总用时),再加了上述优化后只跑了 2s 多。

虽然我的卡常技艺还是比较差,但希望能给和我一样的大常数的 oier 一些帮助。QwQ

2023/10/30 14:32
加载中...