
树链剖分
文章平均质量分 81
jinglinxiao
这个作者很懒,什么都没留下…
展开
-
树链剖分(SPOJ-QTREE)(模板)
先推荐一个菊苣的博客讲解 。对于这种查询树链,修改树边的问题,我们可以使用树链剖分。首先处理出重边和轻边:① uu 和 son[u]son[u] 为重边,当且仅当 son[u]son[u] 是 uu 的所有点中,其子树点数最多的。②不是重边的边为轻边。由重边形成的链为重链。性质:①从根节点到任意点的轻边数量为 O(logn)O(logn) 。证明:轻边的两端点的子树点数之差至少为2倍。②从根节点到任原创 2017-06-08 22:55:39 · 441 阅读 · 0 评论 -
北方大学ACM多校训练第十四周-又是一道简单题 (树链剖分维护点权)
题目链接:北方大学ACM多校训练第十四周-又是一道简单题题意是给定一棵以 11 为点的树,每次询问两个端点 u,vu,v 。求 lca(u,v)lca(u,v) 的子树中,不在链 (u,v)(u,v) 上的点的最小的编号。 树剖后的链的LCA的子树中包含了这条链,且子树在树剖形成的线段树上是连续的。 因此可以将链的 O(logn)O(logn) 段置为 ∞\infty 。然后再查询,然后再恢复为原创 2017-06-09 11:45:31 · 493 阅读 · 0 评论 -
HDU-3966-Aragorn's Story(树链剖分)
题目链接:HDU-3966-Aragorn’s Story题意是给定一棵树。每次修改一条链,使链上所有点加一个值或减一个值。 每次询问询问一个点的权值。 是裸的树链剖分。而且可以用树状数组来维护权值。#include<bits/stdc++.h>using namespace std;const int N=5e4+7;int a[N],son[N],fa[N],top[N],sz[N],原创 2017-06-09 23:24:28 · 298 阅读 · 0 评论 -
HDU - 5840 - This world need more Zhu(树链剖分)
HDU - 5840 - This world need more Zhu将询问分为 kk 大和 kk 小的两部分。假设k≤Bk \leq B 的部分为 kk 小。 对于 kk 大的情况,我们考虑直接暴力。把每一条边分成向上和向下的两条边: 对于向上的边,开始点 (d[x]−d[u]+1)%k==0(d[x]-d[u]+1) \% k==0 。故 d[x]=d[u]−k+1d[x]=d[u]-k原创 2017-08-30 15:05:14 · 752 阅读 · 1 评论