![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
树链剖分
pubgoso
这个作者很懒,什么都没留下…
展开
-
2020牛客暑期多校训练营(第七场)C.A National Pandemic
题面链接 思路:一个很显然的操作是把w−dis(x,y)w-dis(x,y)w−dis(x,y)写成w+depx+depy−2deplca(x,y)w+dep_x+dep_y-2dep_{lca(x,y)}w+depx+depy−2deplca(x,y) 前三项都能用一个变量累加出来,那么主要问题就是如何较快的求deplca(x,y)dep_{lca(x,y)}deplca(x,y)。 那我们可以对树进行轻重链剖分处理,对每条链维护两个bit。一个维护个数,一个维护dep的和。 每个update操作原创 2020-08-01 23:59:58 · 466 阅读 · 0 评论 -
牛客练习赛58 F.XOR TREE
题目链接 思路:给的一条路径,统计所有被奇数个路径包含的点的异或和。 路径上的点显然是深度连续递增的点,那么我们根据两端深度的奇偶情况就可以知道路径上的哪些点是有贡献的,加上即可。 把路径剖出来,用bit维护一下异或和即可。 #include <bits/stdc++.h> using namespace std; typedef long long LL; const int N =...原创 2020-02-29 17:16:04 · 289 阅读 · 0 评论 -
2020 CCPC-Wannafly Winter Camp Day2 (Div.1&2) F. 采蘑菇的克拉莉丝
树链剖分 考虑只枚举和父亲、重儿子的边,还差所有轻儿子的贡献。于是修改的时候,往根跳,在轻重链交替的时候往轻边父亲打标记即可根。 #include <bits/stdc++.h> using namespace std; typedef long long LL; const int N = 1e6 + 10; #define fi first #define se second #d...原创 2020-02-24 15:08:24 · 268 阅读 · 0 评论 -
洛谷P3384 【模板】树链剖分
题目链接 很早就想学的模板,由于懒拖到现在(其实是菜) 树链剖分其实是将树形结构处理成线性序列然后用数据结构来维护树的一个东西。可以解决很多树上问题。 具体重要的三个函数为: 一.dfs1 第一遍dfs遍历这颗树,处理出每个点的子树大小(包含自己)为sizsizsiz,节点的父亲节点为fafafa,节点的深度为dedede,还有每个节点的重儿子(siz值最大的儿子) void dfs1(int n...原创 2019-08-06 15:59:58 · 180 阅读 · 0 评论