最近公告祖先 (LCA)
摘要:最近公共祖先LCA int LCA(int x,int y) { if(dep[x]<dep[y]) swap(x,y); int d=dep[x]-dep[y]; for(int p=0,k=1;p<k;p++,k<<=1) if(d&k) x=f[p][x]; if(x==y) return x
阅读全文
posted @
2020-07-23 20:13
Allen_lml
阅读(115)
推荐(0) 编辑
树链剖分【板子】
摘要:树链剖分 void dfs1(int x) { sz[x]=1; for(int i=b[x];i;i=nxt[i]) { if(to[i]==f[x]) continue; f[to[i]]=x; dep[to[i]]=x; dep[to[i]]=dep[x]+1; dfs1(to[i]); sz
阅读全文
posted @
2020-07-23 20:09
Allen_lml
阅读(114)
推荐(0) 编辑
平衡树之Treap
摘要:二叉搜索树 性质:一个节点x左子树所有点的关键字都比x的关键字小,右子树所有点的关键字都比x的关键字大 treap “树堆” “Tree+Heap” 性质:每个点随机分配一个权值,使treap同时满足堆性质和二叉搜索树性质 复杂度:期望O(logn) 设每个节点的关键字是key,随机权值是rand
阅读全文
posted @
2020-07-21 20:02
Allen_lml
阅读(146)
推荐(0) 编辑
配对堆
摘要:配对堆 一种可并堆。 插入、合并复杂度为O(1),删除等操作的复杂度为均摊O(logn)。 优点:代码短,常数小。 配对堆的结构 用左儿子右兄弟的方式存树。 对每个结点,储存其右兄弟和最左端的儿子。 操作 merge(x,y):合并以x,y为根的两个配对堆。若x,y中有空树则返回非空树,否则将节点大
阅读全文
posted @
2020-07-18 21:04
Allen_lml
阅读(443)
推荐(0) 编辑
矩阵快速幂
摘要:题目背景 矩阵快速幂 题目描述 给定 n
× n的矩阵A,求
{A^k} 输入格式 第一行两个整数n,k接下来n行,每行n个整数,第i行的第j个数表示
{A_{i,j}}. 输出格式 输出
{Ak} 共n行,每行n个数,第i行第j个数表示$\langle{Ak}\rangle
阅读全文
posted @
2020-07-14 11:21
Allen_lml
阅读(118)
推荐(0) 编辑