zoukankan      html  css  js  c++  java
  • [学习笔记]边分治

    基于边的一种分治。统计过中心边的所有路径

    可以类比点分治学习

     

    构造:

    每次找中心边(使得两侧的sz的最大值最小),然后递归下去

    菊花图会卡成链,构造变成O(n^2)。

     

    其实复杂度和度数相关

    考虑转化成二叉树

    三度化

    法一:把所有儿子依次加一个点串起来

     

    法二:

     如果儿子多于2个,建立两个儿子虚点,把真正儿子奇偶分类给两个虚点

    虚点放在n后面,最后会再处理到

     所以其实边分治的分治树上的点有4*n

    本来n个点,rebuild变成2*n

    而分治树除了叶子别的点都是边(类似于kruskal重构树),所以总共4*n个节点

    性质:

    二叉树

    优劣:

    优:1.二叉树儿子少,讨论减少了很多。复杂度基本严格logn

    边分树儿子常数个(为2),每个点在这一层只有两种所属

    边分树也是二叉树,为边分树合并提供条件

    劣:2.虚点必须不影响答案

     

    例题:

    bzoj2870最长道路tree——边分治

    边分树使得每个点两个属性:[WC2018]通道

    边分树是二叉树支持合并: [CTSC2018]暴力写挂——边分树合并

    动态边分治

    和点分治一样

    分治树上只有了2个儿子,处理儿子的贡献就很好办了

    关键还是避免虚点虚边的影响了

    Qtree4——动态点分治

    把虚点设置为黑点。也就可以边分治做了

  • 相关阅读:
    nginx
    VSFTPD
    Dubbo
    ZooKeeper
    maven
    linux 学习
    Shiro安全框架
    Jqueryの锋利的jquery练习
    Java中的数组操作进阶
    Java IO总结之缓冲读入文件
  • 原文地址:https://www.cnblogs.com/Miracevin/p/10430208.html
Copyright © 2011-2022 走看看