首页 > 其他分享 >P6329 【模板】点分树 | 震波

P6329 【模板】点分树 | 震波

时间:2024-12-06 12:13:14浏览次数:4  
标签:int siz dis P6329 震波 lca now mx 点分树

P6329 【模板】点分树 | 震波

来补点分树模板的题解了:

先明确一下点分树的定义:又很多个重心构成的一棵树,且树上的层数关系对应重心的大小

那么我们为什么要建这一颗树呢:因为我们要处理多组询问并且又修改.

然后点分树的建树方式其实在定义中就几乎给出了,就是在求重心时将新老重心连一条边.

然后我们开始思考本题:“所有与 x 距离不超过 k 的城市都将受到影响”:
我们不难想到对于一个重心lca,在它的子树下对答案的贡献(将目标节点设为y)就是:

\(\sum{y\in S_{lca}}[dis_{y,lca}\le k-dis_{lca,x}]*val_y -\sum{y\in S_{ancx}}[dis_{y,lca}\le k-dis_{lca,x}]*val_y\)

其中,\(S_{lca}\)表示在lca的子树内,\(S_{ancx}\)类似.
节点ancx表示的是一个既是lca的儿子,又是x的先祖(也可能是本身)的节点.

然后这题的思路就比较明确了:维护两颗动态开点线段树,对于一个点x:
T1维护\(sum_y|\) \(\forall y \in S_{x}\) $ dis_{x,y}\in[l,r]$
T2维护\(sum_y|\) \(\forall y \in S_{x}\) $ dis_{fa,y}\in[l,r]$
其中fa为x在点分树上的父亲

然后对于每个操作,在点分树上不断向上跳并执行对应操作就好了

然后这题就愉快的做完了

我是绝对不会告诉你我卡了一下午常的

标签:int,siz,dis,P6329,震波,lca,now,mx,点分树
From: https://www.cnblogs.com/LG017/p/18590466

相关文章

  • Note - 树分治(点分治、点分树)
    陈年笔记,现在可能不会了。点分治Q1:基本思想是什么?将路径分为经过\(u\)和不经过\(u\)的两类,在每次分治中计算经过\(u\)的路径数量。Q2:如何统计?一般:遍历\(u\)的每个子节点\(v\),把\(v\)子树内的节点记录下来,得到答案并更新数组。容斥:把\(u\)子树内的节点都记录下......
  • MySQL与地震学:地震波形数据的实时分析宝典
    ......
  • 点分树 学习笔记
    前言还真没有。点分树点分树是个神秘的东西。点分树是通过更改原树形态使树的层数变为稳定\(\logn\)的一种重构树。常用于解决与树原形态无关的带修改问题。是这样的,有些树上问题,看起来用别的树形结构做不了,点分治能做。但是它不仅多次询问(\(n\)同级),还带修,有时候甚至......
  • luogu P6329 【模板】点分树 | 震波
    //【模板】点分树|震波//https://www.luogu.com.cn/problem/P6329#include<bits/stdc++.h>#definedebug(a)cerr<<"Line:"<<__LINE__<<""#a<<endl#defineprint(a)cerr<<#a"="<<(a)<<endl#d......
  • 点分树(动态点分治)学习笔记
    1.定义在点分治的基础上加以变化,构造一颗支持快速修改的重构树,称之为点分树2.算法2.1.思路点分治的核心在于通过树的重心来划分联通块,减少合并层数,从而降低时间复杂度所以,我们可以按分治递归的顺序提出一颗树,易知树高至多为logn具体的说,对于每一个找到的重心,将上一次分治......
  • [DS 小计] 点分树
    点分树是一个处理树上距离的优秀DS。它可以快速处理关于一些树上距离问题。引入我们知道,我们在做点分治的时候,每次找到中心,然后将重心所有的相连的边断开,处理子问题。时间复杂度是\(O(n\logn)\)的。但是有些题目让我们搞强制在线,又要求距离为\(k\)的所有和,这时候点分树......
  • 点分树
    structBIT{ intsz; vector<int>c; voidbuild(ints){ c.resize(s+1); sz=s; } intlowbit(intx){ returnx&(-x); } voidadd(intx,inty){ x++; for(;x<=sz;x+=lowbit(x))c[x]+=y; } intsum(intx){ x++; intans=0;x=min(x,sz)......
  • <学习笔记> 点分树
    感觉可以理解为带修点分治。常用于解决与树原形态无关的带修改问题。——oi-wiki点分树是通过更改原树形态使树的层数变为稳定\(\logn\)的一种重构树。就是通过点分治找重心的方式,将这一层重心为上一层重心的儿子。所以对于很多暴力的复杂度是正确的。一开始发现建树错了......
  • 点分树(动态点分治) 学习笔记
    模板题题目传送门给定一棵树(带点权),支持以下操作:修改点权。查询到一个点距离\(\lek\)的点的权值和。\(n,T\le10^5\)算法解析前置知识:点分治我们考虑把每次求出的重心和上一层的重心连边,我们就可以得到点分树。这棵树有以下性质:树高为\(\logn\),也就是暴力找LCA的......
  • 点分树【产品说明书】
    氡态淀粉质or淀粉素产品用途本章讲解本产品的用途,即大规模处理带修改的树上路径。本产品是点分治的进阶版,故而又名“动态点分治算法”。使用方法前置芝士点分治,请看上一篇博客。点分治利用了重心的特质,使得分治不会超过\(\log{n}\)层。这一点不论过去还是现在都很重要(用......