![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
dfs序和树剖
Marcus-Bao
这个作者很懒,什么都没留下…
展开
-
HDU - 5877 Weak Pair dfs+离散化+树状数组
题目链接题意:n个节点的树,节点的点权为ai,要求找出有多少个二元组(u,v)满足1:u是v的祖先且u!=v2:a[u]*a[v]思路: 先把2转化一下:a[u] 上面那个a[u] 不等式即可.这个过程可以考虑为一个dfs过程,我们一边dfs一边查询即可。这里可以用一个树状数组,每遍历到一个就把他对应树状数原创 2017-09-03 23:59:11 · 409 阅读 · 0 评论 -
树链剖分原理
ACdreamers树链剖分用一句话概括就是:把一棵树剖分为若干条链,然后利用数据结构(树状数组,SBT,Splay,线段树等等)去维护每一条链,复杂度为O(logn) 那么,树链剖分的第一步当然是对树进行轻重边的划分。定义size(x)为以x为根的子树节点个数,令v为u的儿子中size值最大的节点,转载 2017-08-23 15:55:02 · 258 阅读 · 0 评论 -
bzoj 1036 树链剖分(剖点)模板题
题目链接题意: 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w。我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t II. QMAX u v: 询问从点u到点v的路径上的节点的最大权值 III. QSUM u v: 询问从点u到点v的路径上的节点的权值和 注意:从点u到点v的路径上的节点原创 2017-08-23 16:44:59 · 289 阅读 · 0 评论 -
Codeforces Round #442 (Div. 2) Danil and a Part-time Job dfs序+线段树区间反转
点击打开链接思路:由于每个位置要么0要么1,所以这个我们可以用线段树来维护区间和,反转的时候就是区间长度-原来的和即为反转后的.另外对子树进行操作很显然想到dfs序.PS: 注意laz标记此时变为异或,即对同一块区间反转两次是无意义的,#includeusing namespace std;const int maxn = 2e5+5;int n;vectorvt原创 2017-10-24 23:38:35 · 347 阅读 · 0 评论 -
青出于蓝胜于蓝 (dfs序 + BIT)
传送门思路: 首先一眼dfs序,转化成序列问题来解决这是没有问题的 但是我在如何求徒弟中武功比他高的时候纠结好久。。。其实是我在dfs序中编的号和他给的武功等级让我很混乱了/// 这里就运用了树状数组求逆序对的那种思想,我从武功最高的人开始(等级为1的)先看他徒弟的整个区间内是否为0,为0就代表徒弟武功都没他高,然后在把他对应的编号+1(因为我们是按照武功...原创 2018-03-30 21:51:53 · 299 阅读 · 0 评论