启发式合并
文章平均质量分 74
逍遥Fau
为伊蕾娜献上心脏!
展开
-
CF741D Arpa’s letter-marked tree and Mehrdad’s (Dsu on tree)
题目链接: Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths大致题意给定一棵有根树, 有n个顶点. 原树根节点是1号顶点. 每条边连接两个点, 边的权值为一个小写字母(仅包含字母a~v).现在让你分别在以1~n为根节点的子树中, 找到一条路径, 使得路径上的所有字母随意排列后组成的回文串尽可能的长. 最终对于每一个根节点, 输出最长回文串长度.解题思路dsu on tree (算法发明者出的题, 当然要用树上启发式合并啦)以下思原创 2021-05-29 15:05:51 · 94 阅读 · 0 评论 -
CCPC2020 长春 Strange Memory (dsu on tree)
题目链接: Strange Memory大致题意给定一棵有n个点的树, 根节点为1.对于两个点a, b. 若满足 w[lca(a, b)] = w[a] ⊕ w[b] (w数组为该点的权值) , 则称(a, b)为满足要求的一个pair.**pair(a, b)的权值为 a⊕b. **问: 所有满足要求的pair的权值总和是多少. PS: pair(a, b)和pair(b, a)我们认为是同一个pair解题思路dsu on tree我们先稍作分析:由于题目中节点的权值≥1, 因此我们原创 2021-05-27 20:05:52 · 160 阅读 · 0 评论 -
Blood Cousins (dsu on tree + 求第k级祖先)
题目链接: Blood Cousins大致题意给出一片森林, 询问对于给定的点而言, 其k级祖先中有多少个点的深度和当前节点相同.解题思路dsu on tree对于每个询问x, k而言, 我们假设x的k级祖先为p, 则对于每一个p, 我们求出其子树中不同深度的节点数量即可. 我们可以通过dsu on tree做法求出.关于节点的k级祖先求法, 大家可以看这篇博客 ➡️ 博客链接AC代码#include <bits/stdc++.h>#define rep(i, n) for (原创 2021-05-26 15:36:27 · 153 阅读 · 0 评论 -
阔力梯的树 (树上启发式合并)
题目链接: 阔力梯的树大致题意如题所述.想额外提一点的是, 题目中说这个节点的子树, 是需要计算当前节点的.解题思路dsu on tree读完题, 我们分析一下这个题的特点, 需要统计每个节点所有子树的情况. 那不刚好符合dsu on tree能处理的问题吗? 考虑到信息维护, 我们直接把子树的信息维护到一个set中即可.很快, 打完了就吃了T. 因为我每次求当前子树的答案时, 我都从头到尾跑了一遍set, 思考后发现, 还不如暴力方法来的快.考虑如何优化 我们回想一下之前的dsu on t原创 2021-05-25 11:02:55 · 138 阅读 · 0 评论