这里记录一下写代码犯过的错误。
-
基环树找环的时候要判断走到这一个环上点为止
-
每次新找环都要清空栈
-
找到环不要贸然
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.) 注意哈希公式要用:
注意要取模或者直接自然溢出。
-
斐波那契数列的增长速度是接近于 (2^n) 的。
-
注意观察堆的正确性。用
queue
广搜的时候如果不加堆优化,复杂度实际上是不太对的;用堆的时候要谨慎堆的重载运算符和正确性。 -
不要随便
break
-
注意斜率不要想反!想象一下 (k>0) 的一次函数图像!更倾斜不一定斜率更大!有可能是负数!
-
注意之前写过的语句要删干净!要不然留一个
for
复杂度直接就炸了!!! -
写线段树优化建图要注意,往外连的边一定是儿子连自己,往里面连的边是自己连儿子。是有向边。不要写反
-
写线段树注意空间问题,不要都开一个
int tr[N]
和前面线性数组开一样大,这样容易 (MLEor RE) -
DAG 上求每个点走到它能到达的所有点,这是一个世纪难题 bfs 会算重
-
这个傻逼连计算括号匹配数都能算错 快来笑话他) 注意求括号匹配数的时候一旦 (sum<0) 了,要直接把它当成 (0,) 要不然会落下一部分括号。
-
如果看到后缀表达式一类的东西,表达式树是一定要考虑的!!!
-
深搜不行就多想想广搜
-
读题一定要注意题干的每一句话!一旦有条件用不上那基本上就是 GG 了
-
写部分分一定要分清 Sub !要不然一个 Sub 挂了就把其他的所有分都挂没了!! 一定要把 Sub 分清 不要判断错!!!!!!!!!!!!!!!!!!!!!!!!!!
-
有一类运算的值域不是最大值!!!比如异或!!!!求值域的时候一定要谨慎 开小了就全挂!!!!!!!!!!
-
缺省源一定要记得改模数!!!!!!!!不要模错改半天!!!!!!
-
注意不依赖数组下标实际上 (100) 位也可以状态压缩成
int128
!! 或者直接bitset
-
不要注释文件!!!!!
-
整体二分注意哪些是答案更大的 不要写反!!!!! 不要轻易放弃自己写的代码!!!! 想清楚再考虑!!!!!!!!!