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