文章目录

  • 前言
  • 树上启发式合并
    • 引入
    • 算法思想
    • 时间复杂度
  • 模板
  • 练习
    • 例题:CF600E Lomsat gelral
      • solution
      • code
    • CF208E Blood Cousins
      • solution
      • code
    • CF570D Tree Requests
      • solution
      • code
    • CF1009F Dominant Indices
      • solution
      • code

前言

最近不是在⛏李超树嘛,然后就去玩了下线段树,顺道碰见了线段树合并,想起了线段树分治,发现自己连点分治都不会,于是多管齐下,先把树上启发式合并⛏明白再说

树上启发式合并

引入

说到启发式合并,我们最先想到的是什么??
————就是并查集

普通版

void makeSet( int n ) {for( int i = 1;i <= n;i ++ ) f[i] = i;
}int find( int x ) {return ( f[x] == x ) ? x : f[x] = find( f[x] );
}void unionSet( int u, int v ) {int fu = f[u], fv = f[v];f[fv] = fu;
}

并查集按秩合并
对于两个大小不一样的集合,将大小 小的并到大的
这个集合的大小可以认为是集合的高度(在正常情况下)
而我们将集合高度小的并到高度大的有助于我们找到父亲
让高度小的树成为高度较大的树的子树,这个优化可以称为启发式合并算法

void makeSet( int n ) {for( int i = 1;i <= n;i ++ ) f[i] = i, siz[i] = 1;
}int find( int x ) {return ( f[x] == x ) ? x : f[x] = find( f[x] );
}void unionSet( int u, int v ) {int fu = f[u], fv = f[v];if( fu == fv ) return;if( siz[fu] < siz[fv] ) swap( fu, fv );f[fv] = fu, siz[fu] += siz[fv];
}

而我们现在即将要见到的神秘加冰也是启发式合并的一类——树上启发式合并!!
树上启发式合并又叫dsuontreedsu\ on\ treedsu on tree

算法思想

首先发生地点是在树上

用一道例题将思想由抽象化为具象讲解

其他AC算法直接踹飞,不考虑哈

人最原始的欲望就是性和杀戮

最暴力的算法就是直接硬刚,对每一个点都暴力搞子树里面所有的点——O(n2)O(n^2)O(n2)
然后就可以成功TTT飞

我们考虑暴力算法的时间复杂度为什么会这么高,究竟是卡在哪里了??

树的遍历肯定是建立在dfsdfsdfs上的 你难不成搞bfs 看图

[dsu on tree]树上启发式合并总结(算法思想及模板附例题练习)相关推荐

  1. 山东理工大学第十二届ACM程序设计竞赛 - Cut the tree(树上启发式合并+线段树)

    题目链接:点击查看 题目大意:给一个具有 N 个节点的有根树,以 1 号节点为根,节点编号从 1 开始,点有点权.树的第 H 层权值为深度为 H 的所有点的点权之和.树的总权值为所有层权值的最大值.问 ...

  2. 中石油训练赛 - Russian Dolls on the Christmas Tree(树上启发式合并/主席树)

    题目链接:点击查看 题目大意:给出一棵 n 个节点的树,以点 1 为根,现在对于每个节点作为根的子树求解:子树中有多少个编号不相交的连续子段,如:1 2 4 5 7,共有三个连续的段,分别为 [ 1 ...

  3. 2019 ICPC Asia Nanchang Regional K.Tree 树上启发式合并 + 动态开点线段树

    传送门 文章目录 题意: 思路: 题意: 给你一棵树,每个点都有一个权值valvalval,求满足以下条件 (1)x!=yx!=yx!=y (2)xxx和yyy不互为祖先 (3)val[lca(x,y ...

  4. 【CF 600E】Lomsat gelral(树上启发式合并, dsu on tree, 静态链分治,模板题)

    Algorithm 名称:树上启发式合并, dsu on tree, 静态链分治 用处:一般用来解决一类不带修改的子树查询问题 核心思想为:利用重链剖分的性质优化子树贡献的计算. 前置知识:启发式合并 ...

  5. 树上启发式合并(dsu on tree)

    dsu on tree dsu \text{dsu} dsu一般指 disjoint set union \text{disjoint set union} disjoint set union,即并 ...

  6. 模板:树上启发式合并(dsu on tree)

    文章目录 解析 step1:树剖 step2:求出轻儿子的答案(不继承) step3:求出重儿子的答案(继承) step4:加入自己的答案.合并轻儿子的答案并记录答案 step5:清空 复杂度分析 代 ...

  7. 2019 ICPC 南昌 K. Tree(树上启发式合并,平衡树 treap)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://nanti.jisuanke.com/t/42586 Problem 给定一 ...

  8. 树上启发式合并问题 ---- D. Tree and Queries[树上启发式合并+树状数组]

    题目链接 题目大意: 就是给你一棵树,树上每个节点都有一个颜色,在你mmm次询问每次询问给你一个节点uuu和一个数字kkk,问你在uuu这颗子树里面又少种颜色的结点个数是大于kkk; 解题思路: 看到 ...

  9. 树上启动式合并问题 ---- D. Arpa’s letter-marked tree and Mehrdad’s Dokhtar-kosh paths [状态压缩+树上启发式合并]

    题目链接 题目大意: 一棵根为1 的树,每条边上有一个字符(a−va−va−v共22种). 一条简单路径被称为Dokhtar−kosh当且仅当路径上的字符经过重新排序后可以变成一个回文串. 求每个子树 ...

最新文章

  1. 买iPhone 11的要不再等等?iPhone 12首曝:全系5G,回归经典造型
  2. 华为p10 鸿蒙,全面上线!华为鸿蒙新消息传来,这是要彻底替换安卓
  3. MongoDB 复制集节点增加移除及节点属性配置
  4. Skill Level 4 D23
  5. PAT甲级1002 多项式相加
  6. 设计大师Donald Norman和Bill Buxton签书会在南京举行
  7. 《MPLS在Cisco IOS上的配置》一2.3 配置命令参考
  8. mysql自定义函数索引_MySQL自定义函数、视图、索引
  9. 数据库中如何新增一个字段
  10. 《私募股权基金投资基础知识》---第三章
  11. macOS Big Sur 11.2.3 (20D91) 正式版发布,百度网盘下载
  12. TIA博途如何从DB数据块生成源文件或者源文件生成DB数据块?
  13. 《万历十五年》的读后感范文3380字
  14. python学习之一(变量的基本使用)
  15. 现代电信交换【复习上课时的习题】
  16. 删除、拷贝、改文件名 三种操作(DeleteFile函数、CopyFile函数、MoveFile函数)
  17. unit 6 五大句型
  18. 关于将SVN的对比工具设为BeyondCompare
  19. SSL 2382 K好数
  20. Javashop电商系统7.1.5商业版源码

热门文章

  1. 震惊整个世界的新发现,科学界的大骗局
  2. python的网页解析器_python 之网页解析器
  3. 成绩排序 九度教程c语言,九度OJ 1089 数字反转
  4. matlab创建数组对象,MATLAB一维数组(向量)的定义
  5. C语言程序设计答案黄保和编,C语言程序设计答案(黄保和编)第5章.pdf
  6. 网站底部运行时间的php代码,网站底部运行时间统计代码
  7. python根据列表绘制柱状图_python把一个列表画柱状图
  8. jdk解压版_命令行版的斗地主你玩过没?
  9. 反射的基本知识(详解)
  10. 135. 分发糖果002(贪心算法+思路+详解)