• 树上的一个题目


    题目:给出一棵树,每棵树的节点有权值,现在有m组询问,在线询问以节点x为根,高度为y的所有子节点的最大权值。

    这题是我今早在做HDU 4601时,由于思路错了,稍微改动了一下题目,得到这个简单版,不知道有没有出现过原题。

    分析:

      由于必须在线,离线的做法不可取。

      询问的是以节点x为根的子树的节点信息,因此考虑一下dfs序。在dfs时,我们用数组d[i]记录第i层的节点。那么,在一棵子树下相同高度的节点必然连续出现在数组d[i]中。对于n个节点按d[i]重新编号,并且把值也在新编号的位子上,记录相应的hash值(hash[新编号] = 旧编号)。

      构造线段树,维护一下新的编号。

      这时,以节点x为根的第i层子节点必然连续在线段树上。因此对于询问x,dep,我们首先按照dfs序计算出x的第dep层在d[x+dep-1]数组的区间,可以根据dfs序二分取出区间的最左以及最右的节点,根据hash值得到在线段树的区间,询问区间最大值即可。

      

      不知道以上思路是否正确?

  • 相关阅读:
    css font-family(字体样式)
    360浏览器兼容模式,页面不能正常渲染
    SVN 如何更换IP地址
    Update 出现在的问题
    安装node-sass
    vue 里面输出带标签的html
    css 内容超出宽度自动换行
    js 判断各种数据类型
    Java_面向对象三大特征
    Java_基础(二)
  • 原文地址:https://www.cnblogs.com/yejinru/p/3319036.html
Copyright © 2020-2023  润新知