易错点总结

问题:

1:开数组的时候看好数据范围,尤其是建边的时候,有的时候双向建边就会炸数组

2:数组开的时候和数组赋初值注意n,m的意义,和0x3f的大小,会不会炸

3:必须看清题目中的边的数目,可能有重边,不能根据点的开,最多开到n*(n+1)//2,还有mle的问题,同时也要考虑

4.priority_queue是大跟堆,重载运算符的时候注意符号方向问题

5.正常情况下,迭代加深搜索比一般的搜索剪枝慢很多,迭代加深无法最优化剪枝,快300ms

6.kmp计算的时候,是用i和j+1比较。j要从0开始,因为j+1是从第1位开始匹配

7.欧拉图遍历的时候,反向加边,要注意题上字典序的问题。判断有没有欧拉路径或欧拉回路也可以根据结果来反推输出前判断是否把所有的边用上,(或者点)

8.有向图判断欧拉路径还要看图是否联通,可以根据结果,也可以根据并查集来写

9.并查集集合大小相加的时候只能加一遍,好理解一些,如果要查询一个数字所属于的集合里面元素的个数们可以直接使用siz_{find(k)}实现

10.并查集的本质是把一堆分开的数,合并成一个树形结构,且集合内元素不同,可以理解成几个集合,集合里面元素的查询,和集合之间有无矛盾条件的存在是非常有用的

11.并查集判环(并查集求最小环),最重要的是更新每一个节点到父节点距离的操作

12.并查集对于无向图和有向图都可以使用,在判断有没有欧拉路径的时候,可以帮助高效判断一个图是否联通,不连通的话当然没有欧拉回路

13.如果需要没有push_back的时候就访问下标进行操作,需要v.resize(const int )大小

14.dp有的时候要用容斥原理进行去重

15.取mod操作不能多也不能少,多了一减就会有负数出现,必须要+mod)%mod。取少了就会炸logn long所以,要取mod的题最好开long long,指的是被mod的数字,就可以避免上面的问题

16.个人理解dp的无后效性就是指,题目中给的有限定条件,当for循环枚举到当前情况的时候,无法知道后面的约束条件是否成立,导致没有符合要求。再简单一些就是,你会从一个未知是否合法的状态更新当前状态,而且,后面也难以更改。这也就是为什么要注意for变量枚举顺序的原因

17.dp和递推不同的一点就是,递推在向后枚举的时候,不会管当前状态是否最优,只是单纯的转移子结构,而dp是为了尽可能的更改当前情况到最大值,找到合法状态下的最优子结构。(不敢苟同有dp和递推混为一谈的说法)

18.尤其注意dp内部取mod问题和数组MLE的问题,一般都是把ans改成long long

19.树形dp一般就是推出来状态转移方程就好写了,还有,状态的定义和树上结点彼此之间的关系可以自己设定

20.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值