这么快二十多天了,收获还是大的吧。
图论
开始做的图论。图的遍历,领接表和邻接矩阵的dfs和bfs,以前我以为边表是领接表。。。基础超有用。还插着写了并查集,记得直接连祖先。还有欧拉回路,路径记录放在递归后。四种最短路,两种最小生成树,具体看题目选吧。拓扑排序,就是入度为0的进队,删去它连的边,重复。割点割边强连通分量,精髓dfn low,简单说就是判断返祖情况。还有缩点,新建一个点然后把环的儿子都给它,环的父亲的儿子变为这个点。
结构
堆
c++的堆真的方便,感觉不用学什么,直接调用就好了
树
然后刚的线段树,题题灾难。。。一长就容易乱。中间改了几次模板,最后是定下来了,其实每道题大体是差不多的,就把记录的内容改下其它相应改下,标准四段,建树,懒标记下放,修改,询问。权值线段树,就像桶那样啦。主席树,这个真的巧妙,想想模型真的好有立体感,链式结构的。接着刚树状数组,位运算真的迷,又快又好,二维类似,可惜了树状数组不支持区间修改,然后差分出来了,每个数都变成跟前一个的关系,然后许多操作就被支持了。然后还学了下rmq。现在可以搞树上差分,和倍增求lca了
dp
dp真的是五花八门了,不过套路还是不变的。任何dp都划分阶段,然后有状态和转移。线性dp一般是从上一个过来。双进程的话一般从前三个过来,毕竟不然枚举要四重。二维的跟双进程也差不多,就是一般都是从子矩阵过来。区间从子区间过来,外层一般是区间长度。还有神奇的背包,emmm,就是这么个东西。树形dp,真是什么都和树要扯上,从儿子过来或从父亲过来,一般取一。状压dp,先把状态预处理出来,再按处理出来的状态转移,完美的解决了超时超空间的问题。
现在想到的就这么多了