【错误总结】

这里记录一下写代码犯过的错误。

  • 基环树找环的时候要判断走到这一个环上点为止

  • 每次新找环都要清空栈

  • 找到环不要贸然 return, 要在这一次 dfs 中标记好所有点。

  • 如果要累计贡献并改变节点位置,先累计贡献,再移动节点。

  • 如果有形如无法匹配的 (dp) 失配,记得它可能会记录某些状态来继续转移。如 CF700E

  • 找环的时候不要随便把边当成无向的!!!找环一定用有向图!!有向图不需要判断父亲!!!

  • 搜索记录信息的时候不要直接拿点的状态记录,要对点进行标号以防止信息交叉

  • 注意 dp 的时候看看需要的信息,不要把范围弄小了让某些需要的信息没有被 dp 到!!!

  • 注意 vcc 缩点以及求割点的时候! ch 的位置不要乱放!就是应该在 !dfn[j] 的底下!

  • dp 的时候别忘了取模!!!!

  • dij 用堆的时候记得原本的堆是大根堆,要变成小根堆就给它一个相反的小于号!!!!

  • 求次短路能 (dp)(dp,) 直接写 bug 太多了……

  • dp 的时候一定要把所有能转移到的状态都写上,尤其注意要不要转移 (0!) 因为往往带 (-1) 转移的时候就要特判一下 (0) 的位置!

  • 考虑好哪些东西可以被转化掉从而变成冗余状态!!!

  • 求指数的时候取模要改!应该模 (varphi(p)) !!!

  • 一定不要写着写着忘记取模!!!!!!!!!!!!!!!!!!!!!!!!!

  • string 是什么傻逼 加法复杂度不对 直接用 vector<char> 即可

  • 如果需要线段树维护线性基,先考虑能不能点分治,因为如果是树剖线性基是四个 (log) 接近于 (n^2;) 而且合并线性基的时候一定要注意常数优化,第 (i) 位的线性基只会往更低的位次充当线性基

  • fwrite 的输出是需要存储所有的输出字符的,如果输出量太大并且空间不足就不要用它

  • 树同构的时候,如果用最小表示法,那么它是 (O(n^2)) 的,但是用树哈希可以做到 (O(n).) 也可以两遍树形 (dp,) 也可以考虑直接换根 (dp.) 注意哈希公式要用:

[hash[x]=sum_{vin son[x]}f[v] imes p_{siz[v]} ]

注意要取模或者直接自然溢出。

  • 斐波那契数列的增长速度是接近于 (2^n) 的。

  • 注意观察堆的正确性。用 queue 广搜的时候如果不加堆优化,复杂度实际上是不太对的;用堆的时候要谨慎堆的重载运算符和正确性

  • 不要随便 break

  • 注意斜率不要想反!想象一下 (k>0) 的一次函数图像!更倾斜不一定斜率更大!有可能是负数!

  • 注意之前写过的语句要删干净!要不然留一个 for 复杂度直接就炸了!!!

  • 写线段树优化建图要注意,往外连的边一定是儿子连自己,往里面连的边是自己连儿子。是有向边。不要写反

  • 写线段树注意空间问题,不要都开一个 int tr[N] 和前面线性数组开一样大,这样容易 (MLEor RE)

  • DAG 上求每个点走到它能到达的所有点,这是一个世纪难题 bfs 会算重

  • 这个傻逼连计算括号匹配数都能算错 快来笑话他) 注意求括号匹配数的时候一旦 (sum<0) 了,要直接把它当成 (0,) 要不然会落下一部分括号。

  • 如果看到后缀表达式一类的东西,表达式树是一定要考虑的!!!

  • 深搜不行就多想想广搜

  • 读题一定要注意题干的每一句话!一旦有条件用不上那基本上就是 GG 了

  • 写部分分一定要分清 Sub !要不然一个 Sub 挂了就把其他的所有分都挂没了!! 一定要把 Sub 分清 不要判断错!!!!!!!!!!!!!!!!!!!!!!!!!!

  • 有一类运算的值域不是最大值!!!比如异或!!!!求值域的时候一定要谨慎 开小了就全挂!!!!!!!!!!

  • 缺省源一定要记得改模数!!!!!!!!不要模错改半天!!!!!!

  • 注意不依赖数组下标实际上 (100) 位也可以状态压缩成 int128 !! 或者直接 bitset

  • 不要注释文件!!!!!

  • 整体二分注意哪些是答案更大的 不要写反!!!!! 不要轻易放弃自己写的代码!!!! 想清楚再考虑!!!!!!!!!

原文地址:https://www.cnblogs.com/h-lka/p/15202561.html