题面 学习了如何在维护序列的平衡树上查找某个数:按初始的顺序定个权值,然后每次找那个权值的DFS序即可。具体实现就是不停往上跳,然后是父亲的右儿子就加上父亲的左儿子,剩下的就是继续熟悉无旋树堆 1 #include<cstdio> 2 #include<cstring> 3 #include<alg ...
分类:
其他好文 时间:
2018-11-16 21:33:26
阅读次数:
152
题意 给定一棵树,初始每个节点权值为零,q次更改,每次修改将以v为顶点的深度为d的子树全部加上x,最后输出所有节点的权重。 思路 题目只要求每个点最后的值,那么经过观察,发现一个点最后的权值大小只与他的父节点的更新有关,那么我们就只需要考虑他的父节点到他这条链上的情况,把这条链拿出来成为线段,然后维 ...
分类:
编程语言 时间:
2018-11-16 19:13:14
阅读次数:
213
题意:给你一颗以1为根节点的树,初始所有节点的权值为0,然后有m个操作,每个操作将点x的所有距离不超过d的节点权值+1,问经过m次操作后每个节点权值是多少? 思路:如果是一个序列,就可以直接用树状数组做,但这是一颗树,所以我们可以想办法把它转化成序列。我们可以先求出每个节点的dfs序,以及深度和子树 ...
分类:
编程语言 时间:
2018-11-14 00:57:25
阅读次数:
263
算是模板题了 可以用dfs序维护点到根的距离 注意些LCA的时候遇到MAXM,要-1 ...
分类:
编程语言 时间:
2018-11-07 11:31:24
阅读次数:
290
离线 + 树状数组 如果子树中的一个深度的所有点中有两个以上的字母出现了奇数次,那么这个询问的答案就是$No$,其他的情况吧都是$Yes$。 由于只有$26$个字母,我们可以考虑暴力检验,把树映射到$dfs$序上然后看一看子树区间中每一个字母出现了多少次。 我先写了一个动态开点的线段树,然后$O(2 ...
分类:
其他好文 时间:
2018-11-05 20:51:02
阅读次数:
174
嘟嘟嘟 01分数规划+树形背包。 然后就没了。 结果我调了半天,原因还是树形背包不熟练。 我是用dfs序求的,转化的时候,是dp[i][j]转化到dp[i + 1][j + 1]或dp[i +siz[pos[i]]][j],而不是像普通的dp从别的状态转化到dp[i][j],所以最后的答案应该考虑到 ...
分类:
Web程序 时间:
2018-11-04 19:34:11
阅读次数:
223
题意:找三条同起点同终点的不相交的路径 题解:用tarjan的思想,记录两个low表示最小和次小的dfs序,以及最小和次小的位置,如果次小的dfs序比dfn小,那么说明有两条返祖边,那么就是满足条件的答案 // pragma GCC optimize(2) // pragma GCC optimiz ...
分类:
其他好文 时间:
2018-11-04 16:13:12
阅读次数:
232
[Luogu 3258] JLOI2014 松鼠的新家 "" LCA + 树上差分。 我呢,因为是树剖求的 LCA,预处理了 DFN(DFS 序),于是简化成了序列差分。 qwq不讲了不讲了,贴代码。 谢谢阅读。 ...
分类:
其他好文 时间:
2018-10-31 19:58:27
阅读次数:
111
~~本来只是想练练LCT,没想到是个线段树~~ 对于操作1:诶新的颜色?这不是access吗? 也就是说,我们用一棵splay来表示一种颜色 操作2直接在LCT上乱搞…… 不对啊,操作3要查子树 诶好像是静态的 那可以考虑线段树维护dfs序 现在要考虑怎么维护权值 我们发现开始的时候权值就是节点的深 ...
分类:
其他好文 时间:
2018-10-29 19:58:57
阅读次数:
127
题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3653 原来一直想怎么线段树合并。可是不会把角标挪一位。 查询的其实是子树内一段深度的点的 siz 和。因为是子树内,所以按 dfs 序建立主席树,角标是 dep ,值是 siz 。 注意 lo ...
分类:
其他好文 时间:
2018-10-29 10:24:13
阅读次数:
139