启发式合并
xzxxzx401
这个作者很懒,什么都没留下…
展开
-
Codeforces 600E Lomsat gelral
Codeforces 600E Lomsat gelral树上启发式合并题意一棵树,每一个点有一个颜色,统计以每一个节点为根的子树中出现次数最多的颜色的编号,如果有多个颜色,统计他们的和。思路学习了一下dsu on the tree,安利一下良心博客1,博客2,以及CF官方解答。 算法的大致过程: 首先将树轻重链剖分,在dfs的过程中先dfs轻儿子,再dfs重儿子。 假设某一个点的儿子都已原创 2017-09-05 15:34:01 · 325 阅读 · 0 评论 -
HDU 6133 Army Formations
HDU 6133 Army Formationsdsu on tree题意给你一棵n个节点的二叉树,每个节点有一个提交任务的时间,每个节点总的提交任务的罚时为:提交这个节点和其子树所有的任务,每个任务提交时间的总和为该点的罚时。求每个节点提交完所有任务的最小罚时思路树上启发式合并。考虑有这样一个数据结构, 可以动态往一个多重集里面添加数字, 删除数字, 并查询多重集中元素的sumofsum. 这个原创 2017-09-05 16:21:07 · 237 阅读 · 0 评论 -
Codeforces 375D Tree and Queries
Codeforces 375D Tree and Queries数据结构,dsu on tree题意给一棵树,每个节点有颜色,给一些查询(k,v),问k及其子树中,出现大于等于v次的颜色有多少种。思路dsu on tree。复杂度O(nlog2n)O(nlog^2n),dsu的nlogn加上树状数组的logn。dsu的过程中用树状数组维护出现t次的颜色的种数。dfs完一个节点处理他的所有询问。代码#原创 2017-09-06 12:55:30 · 360 阅读 · 0 评论 -
Codeforces 246E Blood Cousins Return
Codeforces 246E Blood Cousins Return数据结构,dsu on tree题意一棵树,每一个点有一个颜色(字符串),每一次询问以某一个点为根的子树中与其距离为k的点有多少种颜色。思路dsu on tree。因为第二次dfs时每个深度的信息都要记录,就对每一个深度开一个set,记录这个深度下出现过的颜色即可。 dfs完一个节点,将它的深度加上询问的深度,就是实际深度,查原创 2017-09-06 14:20:43 · 315 阅读 · 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 · 315 阅读 · 0 评论 -
HYSBZ 1483 梦幻布丁
HYSBZ 1483 梦幻布丁模拟链表,链表启发式合并题意N个布丁摆成一行,进行M次操作.每次将某个颜色的布丁全部变成另一种颜色的,然后再询问当前一共有多少段颜色.例如颜色分别为1,2,2,1的四个布丁一共有3段颜色.思路暴力建出布丁的链表,记录每种颜色的起始位置,结束位置。合并时将一个颜色的链表遍历,全改成另一种颜色,统计对ans的影响。并将链表连起来。为了防止退化,统计出每个颜色的size,进行原创 2017-09-23 21:02:50 · 306 阅读 · 0 评论