杂项

  1. rotate中不需要也不可以push_up祖父节点。
  2. splay时三点共线则需要先旋转fath。
  3. 先push_up(fath)再push_up(x)。
  4. fail树上进行处理时,因为根节点是0而不是1,所以进行树上操作时需要对0做特判。
  5. mid声明为(l+r)/2的时候,如果l,r<0则会出问题;如果声明为(l+r)>>1,则一切正常。
  6. 判断p是否在x,y链上(dep[x]<dep[y]):dfn[x] <= dfn[p] && ed[x] >= dfn[p] && dfn[p] <= dfn[y] && ed[p] >= dfn[y];(p在x子树内,y在p子树内)
  7. 任意字符串的border长度集合由至多log个等差数列构成。证明:https://www.luogu.com.cn/blog/sysjuruo/solution-p4156
  8. 数位dp时若状态具有普适性,则可以通过不清空记忆化数组的方式加快运行速度。但要注意,因为不同询问的限制(eg. is_lim)均不一样,所以若不清空记忆化数组则需使之同样具有普适性。
  9. dijkstra时更新vis应该在出队时,而不是在入队时;这用来防止优先队列中点的距离没有被正确更新。
  10. unordered_set比unordered_map快很多。
  11. priority_queue默认大根堆,比较函数的意义是下比上。
  12. 动态开点线段树查询时若跳到虚无则应及时返回0.
  13. 可删堆可用两个不可删堆代替:a堆存放数据,b堆存放删除数据。删除则将该数压入b堆中;查询时若两堆顶相等则代表数据堆中堆顶曾被删除过,故同时弹出两堆堆顶;重复操作直至堆顶不同,堆顶元素即为所求。
  14. 倍增时倍增维开在前会快很多。
  15. 如果想要确保分布随机,那么推荐使用rand() 而不是 mt19937。
  16. 矩阵优化dp时初始矩阵如果是横向的,那么应该把系数矩阵乘在右边;如果是纵向的,那么应该把系数矩阵乘在左边。
  17. 指数在取模是应该mod(p-1),而不是mod(p)。
  18. 正串建出来的SAM并不能当后缀树使用。事实上,反串SAM的parent树才是正串的后缀树。
  19. 关于mst的一个想法:某条权为v边出现在图的mst上,说明小于v的边并不能使图联通,因此可转为联通性相关的问题。例如清华集训最小生成树和shoi2010最小生成树。
  20. 离散化后无法解决值域连续性的问题的时候,可以考虑在将待离散化的值加入的同时,也加入值+1。如,需离散化1,3,6,9,那么考虑向dat中加入1,2,3,4,6,7,9,10。例题是P3792 由乃与大母神原型和偶像崇拜。
  21. 装压dp转移时为避免重复,可以考虑每次从削去最高位的子集转移。最高位的判定是: (sub<<1) > sta 。详见P4547 随即二分图。
  22. 求最小可行mex的常见处理方式:钦定某个值不能出现,其他值全部出现,那么钦定的值就是mex。详见P5631 最小mex生成树。
  23. 点分治的一种理解方式是树上二分。详见CF556C
posted @ 2020-09-18 17:24  MikeDuke  阅读(176)  评论(0)    收藏  举报