一个月,总算完结了树分治的内容(专题里还有一题还不会搞,不知道能不能分治)其实树分治也没有想象中那么难,
原创
2022-11-10 01:01:44
33阅读
线段树分治经典例题
转载
2019-09-08 18:58:00
77阅读
引子 摘抄自二分图 /【模板】线段树分治题解 对于这类的问题 有一些操作,每个操作只在 \(l \sim r\) 时间段内有效。 有一些询问,每个询问某一个时间点所有操作的贡献。 对于这样的询问,可以对时间建一棵线段树,对于每个操作,相当于在线段树上做区间操作 遍历整颗线段树,到达每个节点时执行相应 ...
转载
2021-07-24 11:37:00
241阅读
2评论
题意:给你一颗带边权树,问你其中 dis(v,u) <= k 的对数
解题思路:
首先推荐大家看 09年国家集训队漆子超 的论文
看到这题 我们可以有三种思路
第一种是枚举起点,遍历整颗树找对数 时间复杂度 为 O(n^2),空间复杂度为 O(n)
第二种是树形dp的思想 每个节点用 长度为 K 数组维护 ,递归求解 时间复杂度为 O(n ^k)空间复杂度 为
转载
2014-10-05 18:41:00
192阅读
2评论
一个非常 trivial 也不太常见的算法,不过学过了就不要忘了哦( 猫树问题可以适用于离线解决以下类型的数据结构问题: 与序列有关,且询问是一段区间 序列静态,即,不涉及修改操作 当然离不离线都可以,由于其过程类似于点分治,所以在线的情况可通过类似于建出建出点分治的情况动态维护。 首先我们总结一下 ...
转载
2021-09-12 20:52:00
523阅读
2评论
离线每个询问,然后做树分治。。#include using namespace std;typedef long long LL;#define lowbit(x) (x&(-x))#define pii pair int maxn = 100005;const int maxm = 200005;c
原创
2023-07-05 19:10:11
87阅读
先预处理出每个点的最近点。。。。然后考虑固定根,对于每个根,从根到子树的路径中任选两条,如果dis[i] + dis[j] #include #in
原创
2023-07-05 19:10:59
68阅读
Mart Master IITime Limit: 12000/6000 MS (Java/Others)Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 285Accepted Submission(s): 94Proble...
转载
2015-01-26 09:52:00
39阅读
2评论
线段树分治 1. 题目引入 Luogu P5787 二分图 /【模板】线段树分治 给你一张非常神奇的图,图上的边会在一个时间出现,并在一个时间删除,求每个时刻这个图能不能构成二分图 2. 问题拆分 首先,我们考虑二分图的判断部分,最常用的是二分图染色法判断,但与此同时,我们后面的修改操作会受限,就只 ...
转载
2021-09-16 10:35:00
145阅读
2评论
【题意】求树上距离小于等于K的点对有多少个?【解题方法】不愧是男人8题,从TLE写带WA,最后过了,经历了10+次。一个重要的问题是,为了防止退化,所以每次都要找到树的重心然后分治下去,所谓重心,就是删掉此结点后,剩下的结点最多的树结点个数最小。每次分治,我们首先算出重心,为了计算重心,需要进行两次dfs,第一次把以每个结点为根的子树大小求出来,第二次是从这些结点中找重心找到重心后
原创
2022-04-20 09:54:03
62阅读
这题说的给了一颗树 然后树上有一些整数值,分别由他给的那30个素数组成,有多少条路径的路径上的点的乘积为立方数, 把每个数分解成相应的素数模3后的值,然后压缩为一个3进制的数然后进行树的分支#include #include #include #include #include #include u...
原创
2021-07-28 11:57:15
56阅读
题意:给你一棵树,每条边有权值,求有没有一条链使得权值和为k 题解:和上一题类似,依旧是树分治,只是我们储存结果的时候是判断加起来为k的点对数,刚开始本来想用map存答案,结果就t了,后来用了vector,数组等各种,最后用数组,绝望的把memset改成for就过了。 学到一个新的点:如果我们调用了
转载
2017-11-11 00:33:00
47阅读
2评论
题意:给定一棵树,然后给定每条边的权值,问你有多少个点对满足路径的权和小于等于m。 析:直接枚举是肯定不行的,会TLE,利用分治的思想,我们可以把树按重心分成几部分,那么答案就是所有子树的点对都经过重心的,对于所有的子树的重心也是这样,对于经过重心的,可以先求出每个点都重心的距离,再排序,利用单调性
转载
2017-08-04 14:08:00
80阅读
https://www.luogu.org/blog/Miracevin/shuo-ju-jie-gou 一种离线处理方法 可以处理“具体哪个修改对询问有影响”、可以贡献不独立、可以支持插入删除 关键是把一个修改看成一个区间,每个询问是一个叶子,修改在线段树上打标记 例题6: bzoj4025 二分
转载
2019-02-07 18:38:00
92阅读
2评论
P3714 [BJOI2017]树的难题 这道题上来一看,求路径,点分治无疑,可是当把板子敲完之后,才发现有点不对劲。 现在每条路的步数可以记录,贡献在dfs的时候标记上fa的颜色种类也可以解决,主要问题是同颜色段只算一次,对于每个分治中心,不同的dis拼到一起后头上的东西是不是相同的,这就是个问题 ...
转载
2021-10-02 06:18:00
140阅读
2评论
这个题和
#include
#include
#include
#include
#include
#incl
原创
2023-07-05 20:11:59
30阅读
注意判断 三个条件都一样的…… (CDQ分治 其实并不是很难理解 只是想不到……)CDQ分治://By SiriusRen#include #include using namespace std;#define N 888888int n,k,tree[N],tot,ans...
转载
2016-12-11 15:43:00
61阅读
TreeTime Limit: 20 SecMemory Limit: 256 MB题目连接http://poj.org/problem?id=1741DescriptionGive a tree with n vertices,each edge has a length(positive int...
原创
2021-07-16 14:29:11
67阅读
被迫营业。 对于树上的路径统计问题,我们一直存在一个比较暴力的做法,就是从根节点出发,先统计所有以根为 \(\text{lca}\) 的路径,然后依次递归每一棵子树,同时使用上面的方法。这个方法的复杂度显然是 \(O(n^2)\) 的,我们可以轻易的用一条链卡掉,于是问题来了,如果题目让我们统计所有 ...
转载
2021-04-24 19:23:00
72阅读
2评论
/*树的分治题意:求树上两点间的距离#include#include#define N 11000#define inf 0x3fffffffstruct node{int u,v,w,next;}bian[N*4];int head[N],yong,num[N],ma,minn,m,nn,vis...
转载
2014-10-01 16:39:00
101阅读