zoukankan      html  css  js  c++  java
  • 动态点分治

    动态点分治

    感觉动态点分治一直没有太懂呀。
    一定是我太菜了

    点分治还是很简单的:
    每次找出当前树的重心
    把树至少缩小一半
    然后暴力把当前的子树上的所有的可能值全部算出来
    只需要容斥的算一下重复的部分就行了

    动态点分治
    似乎代码就比点分治多了一行:
    把点分治的树按照重心割开之后
    只需要记录一下它在分治树的父亲是谁
    分治树高保证是(O(logn))级别的
    (每次都把树的大小至少除了二,这是重心的性质)

    这个时候的这棵树
    虽然不能够直接当原树来搞
    但是相当于每次都是一棵子树
    点还是没有变的
    所以,只需要考虑当前点对于他所在重心块,以及他们的父亲
    向上做出的贡献就行了

    这里我想了很久才弄懂:
    再详细点解释:

    点分治:每次割完重心之后,我这棵子树的点反正没有变化
    现在我询问的东西不是边权
    而和点有关系
    因此,只需要暴力计算一下当前子树的答案就行了
    子树是一样的,只是指定的根节点不一样罢了

    动态点分治:
    相当于在上面再进一步
    我既然每次只需要考虑在当前点所在的块对上面的贡献
    所以,动态的维护一下要求的东西
    来计算对于上面的贡献即可

  • 相关阅读:
    单词统计-续
    “帮你APP”团队冲刺10
    软件工程周总结15
    梦断代码阅读笔记03
    个人课程总结
    梦断代码阅读笔记02
    梦断代码阅读笔记01
    软件工程周总结14
    计算最长英语单词链
    软件工程周总结13
  • 原文地址:https://www.cnblogs.com/cjyyb/p/8278304.html
Copyright © 2011-2022 走看看