树链剖分
文章平均质量分 52
WerKeyTom_FTD
我是一只来自中山纪念中学高三的oier,请多多指教
展开
-
[bzoj3531][SDOI2014]旅行
题目大意给定一颗树,每个节点有颜色和权值,你需要兹瓷四个操作: 1、改变一个点的颜色 2、改变一个点的权值 3、询问一条路径上和起点同颜色的点的和 4、询问一条路径上和起点同颜色的点的最大值题解和数树数思路相同 树剖维护即可#include<cstdio>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;原创 2016-03-04 21:32:27 · 755 阅读 · 0 评论 -
[CF600E]Lomsat gelral
题目大意统计每个子树里出现次数最多的颜色编号和。dsu on tree裸题吧。#include<cstdio>#include<algorithm>#define fo(i,a,b) for(i=a;i<=b;i++)using namespace std;typedef long long ll;const int maxn=100000+10;int h[maxn],go[maxn*原创 2017-06-15 16:07:44 · 679 阅读 · 0 评论 -
[bzoj4543/3522]Hotel
题目大意一颗n个节点的树。 找三个不同编号的节点,使它们两两间距离相同(一条边距离视作1),求方案数。 在3522的版本中,n<=5000 在4543的版本中,n<=1000003522我们来考虑DP 用f[i,j]表示以i为根的子树里与i距离为j的点的个数。 g[i,j]表示在以i为根的子树里,有多少对(x,y)满足x与y到它们lca的距离均为d,且i到它们的lca距离为d-j(容易看出原创 2017-02-28 12:26:03 · 1426 阅读 · 0 评论 -
相位幻击
题目描述对子树整体异或或询问路径异或和树链剖分裸上#include<cstdio>#include<algorithm>#include<cmath>#define fo(i,a,b) for(i=a;i<=b;i++)#define fd(i,a,b) for(i=a;i>=b;i--)using namespace std;const int maxn=200000+10;int原创 2016-11-02 14:34:32 · 507 阅读 · 0 评论 -
[bzoj1969][AHOI2005]LANE 航线规划
题目大意一个n个节点m条边的图,两点间的关键边定义为从一点走到另一个点必须经过的边。 现有许多操作,删一条边或者询问两点间的关键边数量。 保证任意时刻原图联通。时间倒流先把所有边删掉,然后倒着做,转删边为加边。 然后我们思考,最后原图也是联通的,那么做边双联通分量缩点后,就会变成一棵树。 然后显然两个结点间关键边数等于它们所处联通分量代表的点在树上树路径的边数。 然而我们要处理加边,每加一原创 2016-08-18 21:44:39 · 1089 阅读 · 0 评论 -
nekopara
题目描述树链剖分把边和询问放在一起按照权值排序,权值相同询问优先。 假如树上每条边都用01表示是否超过当前limit。 扫到一条边,就是把对应边从0变成1。 扫到一个询问,就直接询问了。 树链剖分,线段树维护区间长度、答案、左边/右边的连续1个数。 然后就可做了。#include<cstdio>#include<algorithm>#include<cmath>#define fo(原创 2016-06-28 18:06:07 · 786 阅读 · 0 评论 -
染色
题目大意给定一颗树,每个点默认白色,有两种操作。 把一个点染黑(不保证此时该点为白色) 询问一个点与所有黑点的距离和树剖先把原树转化为有根树。 然后询问一个点u,就是枚举每一个黑点v 然后贡献为d[u]+d[v]-2*d[lca(u,v)] 记录黑点的总个数和深度和,前两项很容易求和,最后一项呢? 我们尝试枚举u到root路径上的每一点w,设size[w]表示w是多少个黑点的祖先。 那原创 2016-04-14 19:30:33 · 681 阅读 · 0 评论 -
[JSOI2016]轻重路径
题目大意给定一颗二叉树。 每次删除一个叶子节点,并要求输出所有重链指向结点编号之和。 初始也要输出一次。 初始时,如果一个结点的两个儿子大小相同,则选择左儿子为重儿子。 一次删除操作后,如果一个结点的两个儿子大小相同,则不改变原先的重儿子选择。发现如果删除一个叶子,重儿子指向可能会发生改变的一定是该结点到根节点的路径上的结点。 其中表现为——路径上的重边可能会变成轻边。 这个就不好处理…原创 2016-04-25 19:18:56 · 1761 阅读 · 0 评论 -
[bzoj1036]树的统计
题目描述 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。 我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点u到点v的路径上的节点包括u和v原创 2016-01-14 22:11:28 · 865 阅读 · 0 评论 -
生命之树
题目大意ansu=∑i在u子树中∑j在u子树中且i<j(vi xor vj)∗LCP(Si,Sj)ans_u=\sum_{i在u子树中}\sum_{j在u子树中且i<j}(v_i\ xor\ v_j)*LCP(S_i,S_j) 每个点都有点权v和一个字符串S,求ans[]。做法可以想到把v拆位做于是现在变成了黑白树。 可以想到dsu on tree,trie上节点记录子树内某个颜色的数量即可。原创 2017-09-15 21:56:49 · 396 阅读 · 0 评论