数据结构
文章平均质量分 89
各种数据结构
是哆啦D梦
ACMer
展开
-
分治算法之点分治
点分治算法的学习算法原理解决什么样的问题: 树上静态计数,取最值等目的。原理: 在树上进行分治,通过以重心为根,将一棵树变成若干棵子树,那么问题就变成了:计算不同子树之间的答案,同一子树之中的答案。 后者可以递归到子树,继续分治求解。树的重心定义: 以重心为根的所有的子树中 size 的最大值最小。(都不超过n/2)根据定义写出以下代码void getroot(int u,int fa){//找重心,maxsize[u]为 u 的子树的最大size size[u]=1; for(in原创 2021-09-10 15:24:51 · 237 阅读 · 0 评论 -
dfs序+欧拉序+重链剖分
dfs序dfs序学习构造: dfsdfsdfs 序是通过按照 dfsdfsdfs 时访问结点的先后顺序产生的序,一般维护两个数组 in,outin,outin,out ,用 id 表示时间戳。每次新访问一个新结点 in[u]=++idin[u]=++idin[u]=++id,访问结束后 out[u]=idout[u]=idout[u]=id。用处: dfsdfsdfs 序可以把树上问题转化为区间问题,然后用一些线段树,树状数组之类的数据结构维护。性质: 若 vvv 是 uuu 的子树,则 v 的时间原创 2021-09-05 16:56:12 · 216 阅读 · 0 评论 -
莫队分块(带修,不带修,回滚)
个人理解莫队是一种优雅的暴力,是著名的离线算法之一。一般用来解决区间查询问题,利用了区间范围的特点,将查询区间的顺序排序,将时间复杂度降至O(nsqrt(n))。这里的区间查询可查询非常多的东西算法分析首先我们引入一道题:例题题目描述:n个数,m个询问,每次询问查询 [l,r] 区间,判断区间内是否出现重复数字,n,m<=50000。暴力算法:for,vis,cnt=r-l+1,O(nm)一个思维:假设第一个查询区间为 [3,7] ,设 l = 3,r = 7,第二个查询区间为 [2,原创 2021-04-15 20:14:05 · 277 阅读 · 0 评论 -
并查集学习笔记
并查集是一种用来实现将元素分配成多种集合的一种数据结构。例如:在一个城市中有n个人,他们分成不同的帮派,给出一些人的关系,例如u,v是朋友,则u,v成为一个帮派。实现操作初始化定义 f[i] 为编号为 i 的人所在的帮派的老大的编号初始时,每个人各自为派,则 f[i]=i合并当存在一对朋友关系x,y,当他们不属于一个帮派时,任意取一人所在的帮派老大作为所合并帮派的老大,即令p1,p2分别为x,y的祖先,则f[p1]=f[p2]查找帮派老大int find(int x){ if(.原创 2020-10-28 12:48:28 · 363 阅读 · 1 评论