zoukankan      html  css  js  c++  java
  • dsu on tree(树上启发式合并)

    其实已经做过很多道了,但自己直到现在才重视起来它

    以下大部分是看的洛谷日志:=w=

    它可以处理一些常见的树上问题:

    1.每个节点的答案是其子树的叠加,考虑利用这个性质处理问题

    2.就是你必须通过整个子树来更新自己当前节点的信息的这种题

    具体实现:

    先遍历其非重儿子,获取它的ans,但不保留遍历后它的check

    遍历它的重儿子,保留它的chec

    k再次遍历其非重儿子及其父亲,用重儿子的check对遍历到的节点进行计算,获取整棵子树的ans

    注意:

    1.为什么不合并第一步和第三步呢?因为check数组不能重复使用,否则空间会太大,需要在 O(n) 的空间内完成。

    时间复杂度:O(nlogn)

    优秀之处:可以水树套树的题和吊打树上莫队且常数小

    练习题

    CF600E Lomsat gelral(http://codeforces.com/problemset/problem/600/E)

    题意翻译:树的节点有颜色,一种颜色占领了一个子树,当且仅当没有其他颜色在这个子树中出现得比它多。求占领每个子树的所有颜色之和。

    UOJ284 快乐游戏鸡(http://uoj.ac/problem/284)

    参考资料/扩展阅读

    CF741D作者介绍的dsu on tree(http://codeforces.com/blog/entry/44351)

    这位作者的题解(http://codeforces.com/blog/entry/48871)

     

  • 相关阅读:
    Oracle中的to_date参数含义
    Oracle 中 IW和WW 有何差别
    iBaits.Net(1):简介与安装
    带你逛逛诺基亚芬兰总部:满满都是回忆啊
    LINQ的分组聚合技术
    WPF的Docking框架 ——AvalonDock
    iBatis.Net(3):创建SqlMapper实例
    iBatis.Net(2):基本概念与配置
    C#异步编程及其同步机制
    web使用
  • 原文地址:https://www.cnblogs.com/lkx422/p/11805428.html
Copyright © 2011-2022 走看看