随笔分类 - 树链剖分
摘要:"传送门" 这题真棒! 首先是这题是边权题,为了方便处理,化为点权。可一条边有两点点啊,用哪个存权值好呢?当然是儿子啦!因为一个儿子唯一对应一个连着父亲的边。 然后这题对于线段树涉及到区间最值查询、区间修改、区间加、单点修改,我很偷懒地把单点修改弄成区间修改了。 那么运算优先级问题:区间覆盖优于区间
阅读全文
摘要:"传送门" 这道题可以用树剖或树上差分+LCA做,思路一致。每次把两个点之间的路径+1即可,但是这里是经过一次+1次,终点除外。 这里采用树上差分+LCA,LCA使用树剖维护 树上差分的思路是:每个点的权值为其子树的权值和。 修改u到v的路径,那么$val[u]+1,val[v]+1,val[lca
阅读全文
摘要:"传送门" emmmm裸的树剖,但是考点好像是在线段树上…… 如何维护一个区间里有多少个连续相同的数字块呢?考虑对于$a$和$b$两个区间,如果他们相接的端点颜色相同,那么合并出的新区间的$seg = seg[a] + seg[b] 1$,否则就是$seg = seg[a] + seg[b]$ 这就
阅读全文
摘要:"传送门" emmm树剖裸题,就线段树维护一下最大值和权值和就行了。 这里有一个点就是:因为会出现负数,所以查最大值的时候不能初始化为0,这样就没法维护负值 cpp include include include define MAXN 30005 struct Node { long long s
阅读全文
摘要:"传送门" 捡起了之前树剖的坑,之前只写了树剖LCA的板子但是树剖模板却一直没有写好,学长 "sjie" 非常贴心地给我们上课,于是我去补了一下板子,并且写下自己对树剖的理解。 树剖用来干什么? 维护树上的修改 求u到v的路径上的所有点的权值和 修改u到v的路径上的所有点的权值 求以u为根的子树的结
阅读全文
摘要:```cpp include include define MAX 500005 int d[MAX],fa[MAX],size[MAX],top[MAX],son[MAX]; int N,M,S,tot=0; int head[MAX]; struct edge{ int v,next; }G[M
阅读全文

浙公网安备 33010602011771号