首页 > TAG信息列表 > 链剖分

洛谷 P3384 【模板】轻重链剖分/树链剖分

【模板】轻重链剖分/树链剖分 题目描述 如题,已知一棵包含 \(N\) 个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 1 x y z,表示将树从 \(x\) 到 \(y\) 结点最短路径上所有节点的值都加上 \(z\)。 2 x y,表示求树从 \(x\) 到 \(y\) 结点最短路径上所有节点的值之和

轻重链剖分学习笔记

这是第二遍 \(dfs\),定义:\(son[now]\) 为 \(now\) 点的重儿子,\(topf\) 为当前的重链上深度最小的一个点也就是开始的点。我们在遍历整棵树的时候,会选择先去遍历这个点的左儿子然后再去管其他的点。我们在这一遍遍历其实就是在给他们分配线段树上的基本信息以及记录轻重链的基本信

轻重链剖分

目录轻重链剖分轻重链剖分基本原理代码实现(板子)题面换根影响轻重链剖分链操作子树操作整体代码树剖完就是线段树题了qwq没了题外话 轻重链剖分 论文鸽说叫 heavy-light decomposition 或 heavy path decomposition . 正确叫法(不是): 这是真的: 轻重链剖分基本原理 一个节点子树大小

Luogu-P3384 【模板】轻重链剖分/树链剖分

学习 是看这篇博文学习的。 https://www.cnblogs.com/chinhhh/p/7965433.html 代码 #include <bits/stdc++.h> using namespace std; #define MAXN 100005 long long Ha; int n,m,root; vector<int> graph[MAXN]; int siz[MAXN]; int son[MAXN]; int fa[MAXN]; int dep[M

icpc2020澳门 I. Nim Cheater (轻重链剖分优化dp空间复杂度)

题目链接:https://codeforces.com/gym/103119/problem/I \(dp\) 直接背包 操作构成一棵树,节点 \(i\) 的答案就是从 \(i\) 到根这一条链上的 \(dp\) 值,如果没有空间限制就做完了 考虑进行轻重链剖分,由于每个节点到根的路径上只有 \(O(logn)\) 个轻边,设 \(dp[cnt][v]\) 表示链上第 \(

【题解】bzoj3252 攻略

bzoj3252 攻略 \(\text{Solution:}\) 题目是指每次选择一条链就会把它清空,求选 \(k\) 条链的最大价值。 打眼看上去不知道咋做……想一下这不就是个长链剖分! 维护一个带权的长链剖分,然后直接对每一条链的权值和排序,取前 \(k\) 大就可以了。 因为长链剖分的每一条链都是不重复的,没

P3384 【模板】轻重链剖分

题目 题目 思路 树剖终于A了…… 定义: · 重儿子:所有儿子中儿子最多的一个儿子 · 重边:连接2个重儿子的边 · 重链:由重边构成的链 步骤1:先一个dfs,求深度,子树大小,重儿子 步骤2:再一个dfs,按先重再轻的优先级求dfs序,并求每条重链的深度最小的节点,设为top,并将每个节点用dfs序映

[C++]P3384 轻重链剖分(树链剖分)

[C++]树链剖分 预备知识 树的基础知识 关于这个本文有介绍 邻接表存图 线段树基础 会区间加法和区间结合就可以了P3372 建议阅读这篇Blog 最近公共祖先LCA 虽然用不到这个思想 但是有类似的 有助于快速理解代码 建议阅读这篇Blog 算法思想 树链剖分 顾名思义 就是把树

轻重链剖分 学习笔记

目录板子题算法解析定义实现预处理修改复杂度代码 板子题 题目传送门 这道题目要求在树上修改和查询点一条链上或者是一棵子树的点的权值。 算法解析 考虑使用LCA,但是不能使用倍增的解法(倍增只能查询不能修改),所以我们要使用一种新的算法——轻重链剖分。 建议先学完LCA在来看这篇

P3384 【模板】轻重链剖分

#include<stdio.h> #include<iostream> #include<algorithm> using namespace std; const int maxn=2e5+10; int arr[maxn],w[maxn],n,p; struct node { int v,nxt; }e[maxn<<1]; int head[maxn],cnt; int dep[maxn],fa[maxn],siz[maxn],son[maxn],i

洛谷 P3384 【模板】轻重链剖分

传送门 #include <bits/stdc++.h> using namespace std; using ll = long long; using p = pair<int, int>; const int maxn(1e5 + 10); const int maxm(2e5 + 10); int mod, ecnt, v[maxn], head[maxn]; int dep[maxn], siz[maxn], fa[maxn], son[maxn]; int tim,