dsu on tree
Love_xyh
这个作者很懒,什么都没留下…
展开
-
CF570D Tree Requests
题目大意:给定一个以1为根的n个节点的树,每个点上有一个字母(a-z),每个点的深度定义为该节点到1号节点路径上的点数。每次询问 a,b.查询以a为根的子树内深度为b的节点上的字母重新排列之后是否能构成回文串.重排之后构成回文串的条件是:每个字母出现次数都为偶数或者只有一个字母出现次数为奇数。因此我们可以直接维护cnt数组来统计子树中在某个深度上每个字符出现次数,然后再检查是否符合条件就行了。至于查询操作,我们可以离线处理,然后把它挂在节点上,每当统计到该节点时,更新答案就行了。时间复杂度:O(26原创 2020-08-31 16:15:31 · 196 阅读 · 0 评论 -
CF600E Lomsat gelral
题意:一棵树有n个结点,每个结点都是一种颜色,每个颜色有一个编号,求树中每个子树的最多的颜色编号的和。考虑如何用dsu on tree来做。我们不难想到一个暴力的做法,用一个全局sum数组记录颜色出现次数,对每个节点,遍历其所有子树,然后统计答案,最后再清空sum数组(不清空的话会对影响到其他节点),这个时间复杂度是O(n^2),肯定过不去。然后我们可以考虑一个优化,遍历到最后一个子树时是不用清空的,因为它不会产生对其他节点影响了,根据贪心的思想我们当然要把节点数最多的子树(即重儿子形成的子树)放在最原创 2020-08-31 16:04:09 · 206 阅读 · 0 评论