zoukankan      html  css  js  c++  java
  • 「刷题」 网络

    看了一下网上基本都是线段树二分的题解,然而我想到一种整体二分的思路,正好练习一下。

    是道好题。

    首先用树上ST表处理,用于求LCA。

    考虑整体二分离线求解。

    一种方法是用树链剖分的,复杂度是$O(log^2n)$的,在套上个整体二分,复杂度达到了$O(nlog^3n)$所以说不可以直接树剖暴力。

    可以用树上差分的方式。

    考虑假设对于当前询问二分出的某一个答案,如何$check$?

    只需要判断这个点是否阻断了所有的权值大于这个答案的路径,如果是的话,那么放低上界,否则升高下界。

    用整体二分来做这个过程即可。

    对于某一条路径的贡献,如果是树剖的话直接链上修改即可,判断当前这个点是否阻断了所有的添加上去的路径,但是复杂度不正确。

    考虑树上差分,那么对于一条路径,给$a[x]++,a[y]++,a[lca]--,a[fa[lca]]--$,可以差分出这条路径的贡献,那么我对于一个点作子数查询,用$dfs$序即可,得到的就是经过这个点的路径个数,这样可以直接用树状数组搞。

    那么每次分治一段区间的时候,考虑大小大于$mid$的边的贡献,把时间大于当前询问的修改全部打到树状数组上,然后直接查询即可,就可以分治出结果了。

    时间复杂度$O(nlog^2n)$树状数组常数非常优秀。

    得解。

  • 相关阅读:
    [BZOJ4631]踩气球
    [BZOJ1998][Hnoi2010]Fsk物品调度
    [BZOJ3624][Apio2008]免费道路
    [BZOJ1064][Noi2008]假面舞会
    [BZOJ4154][Ipsc2015]Generating Synergy
    [BZOJ1941][Sdoi2010]Hide and Seek
    [BZOJ2850]巧克力王国
    [BZOJ2683][BZOJ4066]简单题
    万年历(calendar)
    SACD ISO镜像中提取DSDIFF(DFF)、DSF文件
  • 原文地址:https://www.cnblogs.com/Lrefrain/p/11620445.html
Copyright © 2011-2022 走看看