
树上问题
xzxxzx401
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
HDU 6162 Ch’s gift
HDU 6162 Ch’s gift线段树,离线题意给一棵树,每次询问:uv两点间的路上(包括uv),点权在ab之间的所有点点权和。思路 由于没有修改操作,一个显然的想法是离线处理所有问题 将询问拆成1-x,1-y,1-LCA(x,y),则处理的问题转化为从根到节点的链上的问题。 解决这个问题,我们可以在dfs时向treap插入当前的数,在退出时删除这个数,并且每次维护在该点上的答案原创 2017-08-23 16:30:22 · 273 阅读 · 0 评论 -
Codeforces 600E Lomsat gelral
Codeforces 600E Lomsat gelral树上启发式合并题意一棵树,每一个点有一个颜色,统计以每一个节点为根的子树中出现次数最多的颜色的编号,如果有多个颜色,统计他们的和。思路学习了一下dsu on the tree,安利一下良心博客1,博客2,以及CF官方解答。 算法的大致过程: 首先将树轻重链剖分,在dfs的过程中先dfs轻儿子,再dfs重儿子。 假设某一个点的儿子都已原创 2017-09-05 15:34:01 · 376 阅读 · 0 评论 -
HDU 6133 Army Formations
HDU 6133 Army Formationsdsu on tree题意给你一棵n个节点的二叉树,每个节点有一个提交任务的时间,每个节点总的提交任务的罚时为:提交这个节点和其子树所有的任务,每个任务提交时间的总和为该点的罚时。求每个节点提交完所有任务的最小罚时思路树上启发式合并。考虑有这样一个数据结构, 可以动态往一个多重集里面添加数字, 删除数字, 并查询多重集中元素的sumofsum. 这个原创 2017-09-05 16:21:07 · 272 阅读 · 0 评论 -
HackerEarth The Grass Type
HackerEarth The Grass Typestd::map的启发式合并,树上问题题意一棵树,每个节点有一个int。问每个节点u的子树中,两个不同节点(a,b)满足val[a]*val[b]=val[u]的pair(a,b)有多少个。思路map的启发式合并,dfs时将子树的结果合并到根上,并查询pair即可。复杂度O(nlog2n)O(nlog^2n)。代码#include<bits/std原创 2017-09-07 13:58:40 · 361 阅读 · 0 评论 -
Codeforces 842C Ilya And The Tree
Codeforces 842C Ilya And The Tree树上gcd题目有一棵根节点为1的树,每个结点都有权值。求每个结点从根节点到它的路径上的点的最大gcd(最多可以把一个路径上的一个点权值变成0)。思路关于区间gcd。。有个结论:就是可以‘暴力’,因为区间gcd收敛非常快,无论是在线段树搞,还是这次这题。都是暴力。线段树处理区间gcd的一题开始写树形dp,dp开两个记录当前节点的路径最大原创 2017-08-30 15:41:56 · 445 阅读 · 0 评论 -
UVA 11354 Bond
UVA 11354 Bond最小生成树,LCA,ST题目给出一张n个点m条边的无向图, 每条边有一个危险度,有q个询问, 每次给出两个点s、t,找一条路, 使得路径上的最大危险度最小。思路首先,我们可以发现,如果求一个最小生成树, 那么任意两点, 在生成树上有唯一路径, 而且这条路径上的最大危险值一定最小。 然后在最小生成树上做路径最小值的询问,处理出LCA,在用RMQ。代码#include<b原创 2017-10-16 15:01:19 · 297 阅读 · 0 评论