随笔分类 -  树上启发式合并

摘要:"传送门" 题意 给出一棵 $n$ 个结点的树,每个结点有一个颜色 $c_i$ 。 询问 $q$ 次,每次询问以 $v$ 结点为根的子树中,出现次数 $\ge k$ 的颜色有多少种。树的根节点是 $1$。 题解 反正我看见这个 $\ge k$ 就觉得要用线段树,实际上好像不用写线段树的 Orz。 还 阅读全文
posted @ 2020-04-01 14:17 BakaCirno 阅读(142) 评论(0) 推荐(0)
摘要:"传送门" 题意 给定一棵以 11 为根,nn 个节点的树。设 d(u,x)d(u,x) 为 uu 子树中到 uu 距离为 xx 的节点数。 对于每个点,求一个最小的 kk,使得 d(u,k)d(u,k) 最大。 题解 和那个数颜色的题是一样的,就是一道标准的 dsu on tree 的模板题。当练 阅读全文
posted @ 2020-04-01 13:14 BakaCirno 阅读(161) 评论(0) 推荐(0)
摘要:"传送门" 题意 给定一片森林,每次询问一个节点的K Son共有个多少不同的名字。一个节点的K Son即为深度是该节点深度加K的节点。 题解 和前一道题基本是同一个套路,只是这个有重名,所以直接用set数组来代替int数组计数就行了。 因为重儿子没有求对吃了一大波TLE。 代码 阅读全文
posted @ 2020-04-01 12:42 BakaCirno 阅读(222) 评论(0) 推荐(0)
摘要:"传送门" 题意 给一片森林,$m$ 次查询,询问每个节点与其它多少个节点有共同的第 $k$ 祖先。 题解 对于这种无修改的询问题目,直接离线询问。 把每个询问中那个第 $k$ 祖先用倍增求出来,然后问题转化为问第 $k$ 祖先的子树中有多少个点与询问的点同深度。这个问题可以用树上启发式合并来解决。 阅读全文
posted @ 2020-04-01 10:46 BakaCirno 阅读(236) 评论(0) 推荐(0)
摘要:"传送门" 题意 一棵根为1的树,每条边上有一个字符(a v共22种)。 一条简单路径被称为Dokhtar kosh当且仅当路径上的字符经过重新排序后可以变成一个回文串。 求每个子树中最长的Dokhtar kosh路径的长度。 题解 既然要重新排列,那么这个路径的条件就是: 简单路径 路径中 22 阅读全文
posted @ 2020-03-31 17:54 BakaCirno 阅读(194) 评论(0) 推荐(0)
摘要:"传送门" 题解 这种统计所有子树的题肯定是可以用树上启发式合并做的。 预处理出每个点到根节点的距离,和重儿子。 然后开始做启发式合并,关键是如何统计每个节点的答案。 这里我参考了点分治的处理思路,在统计每个节点的答案之前,我一直了它一颗子树的所有信息,然后我就先遍历完它的一颗子树,将这颗子树的所有 阅读全文
posted @ 2020-03-31 13:55 BakaCirno 阅读(139) 评论(0) 推荐(0)
摘要:"传送门" 好像大家都是拿这道题作为树上启发式合并的板子题。 树上启发式合并,英文是 dsu on tree,感觉还是中文的说法更准确,因为这个算法和并查集(dsu)没有任何关系。一般用来求解有根树的所有子树的统计问题。 根据轻重儿子的各种性质,可以证明这个算法的时间复杂度为 $O(nlogn)$, 阅读全文
posted @ 2020-03-31 11:52 BakaCirno 阅读(140) 评论(0) 推荐(0)