算法-从入门到放弃
bensanhuan
这个作者很懒,什么都没留下…
展开
-
可持久化线段树(主席树)及可持久化数组
定义:可以访问历史版本的线段树为可持久化线段树 B站讲解视频:【AgOHの数据结构】主席树 可持久化线段树之所以可以访问历史版本,是因为宏观上看,它为每个版本维护了一棵树。当然,如果真的对每个版本建一颗树,时间空间复杂度都hold不住。所以建立i版本的树时,如果某颗子树相对于i-1版本没有变化,就可以直接使其父亲对应的指针指向i-1版本的这颗子树。 主席树更多的用于单点更新问题,可以为每一次更新后的版本建立一棵树,递归更新的过程中,先令当前节点等于上一个版本的节点,如果某个子树要更新,则新开一个空间存放.原创 2020-08-11 11:30:16 · 497 阅读 · 0 评论 -
图论算法&模板整理--供自查--持续更新
学了忘,忘了学,学了还得忘 欧拉回路 //欧拉路径:一条通过每条边一次且仅一次的路径 //欧拉回路:一条通过每条边一次且仅一次的回路 //无向图欧拉回路:所有顶点度数为偶数 //有向图欧拉回路:所有顶点入度等于出度 //无向图欧拉路径:除了起点与终点度为奇数,其它都是偶树 //有向图欧拉路径:起点出度比入度大一,终点入度比出度大一,其它入读等于出度 //递归(深度优先搜索)欧拉回路 void Euler(int u) { int v; for(v=0;v<n;v++) { if(gra.原创 2020-07-19 14:51:25 · 324 阅读 · 0 评论 -
斜率优化--我的理解&我的模版
我的理解 如有疏漏错误之处,请多指教 请先阅读:参考链接 本文是在以上链接内容的补充说明 这些点是什么? 这些点并没有实际意义,是基于等式的一种变形而已,不过每个点确实唯一对应一个状态 举个例子(pjp_jpj为前缀和): dpi=min{dpj+(pi−pj)2}(0<j<i) dp_i= min\{dp_j+(p_i-p_j)^2\} (0<j<i) dpi=min{dpj+(pi−pj)2}(0<j<i) 对一个确定的j: dpi=dpj+(pi+p原创 2020-07-15 22:19:06 · 177 阅读 · 0 评论 -
树的重心---解释和模板
树的重心 使用背景: 对一颗无根树,求重心.(当然,对一棵树,究竟是有根还是无根,完全自己说了算), 感性定义: 作为根时,能使各子树节点数目"均衡"的节点。 明确定义: 设f(x)f(x)f(x)表示节点xxx为根时,所有子树中的最大子树节点数。f(x)f(x)f(x)最小的节点即这颗无根树的重心。 性质: 以树的重心为根时,所有子树的大小都不超过整棵树大小的一半。 树中所有点到某个点的距离和中,到重心的距离和是最小的;如果有两个重心,那么到它们的距离和一样。 把两棵树通过一条边相连得到一棵新的树,那么原创 2020-07-13 14:03:00 · 564 阅读 · 0 评论 -
树上启发式合并
树上启发式合并 前言: 今天又遇到启发式合并了,还没有写出来,还是整理一下。 什么时候用启发式合并? 当需要统计并合并子树的信息,然而一次合并的复杂度为O(n)O(n)O(n),整体复杂度为O(n2)O(n^2)O(n2)时,使用启发式合并可以将合并的复杂度降为O(nlogn)O(nlogn)O(nlogn)。 启发式合并的思想 举一个例子,现在有一棵树,每个节点涂有一个颜色。需要统计每颗子树上哪种颜色最多。 暴力合并 nt n;//size of tree vector<int> tree[m原创 2020-07-12 10:47:07 · 355 阅读 · 0 评论