zoukankan      html  css  js  c++  java
  • 学习了一个新技巧

    我居然能从模拟赛中学到新技巧..感动..

    大概就是..给你一个DAG..你可以用这个技巧快速维护它出去的路径,给定方式是字典序第p大..然后这个p有一个bound..比如10^18..

    首先树的维护比图容易到不知道哪里去了..

    我们考虑设F[p]=1+sum(F[son[p]])即它出去的路径条数..

    对于一个点,我们考虑查询它的第K大出路径,那么我们对它的儿子按字典序for一遍,直到找到这个路径的下一个节点..很显然对吧..复杂度是O(n)的..

    要优化这个东西我们考虑找出它F最大的儿子..这样其它儿子上的F都小于父亲的一半..那么走这些边只需要log(bound)次对吧很好..

    对于那个最大的儿子我们就倍增..

    然后考虑这个东西建出来是一个森林..

    然后我们就可以愉快的把树上能做的东西搬到DAG上啦..虽然有些限制..而且树也不能动起来..

    然后这个东西本身有log^2的复杂度..然后会把一条路径剖成log段..

    你套个树剖上去就轻易log^3了对吧..

    但是考虑这个东西和树剖那么像,常数还是不太大的..

    你在这上面搞第k大带修改..就log^4了吧..(有理有据!逃)

    (这个东西(log)套树剖(log)套BIT(log)套可持久化线段树(log))

    不过如果仅仅是第k大那不需要树剖,复杂度是log^2..

    upd.. revised.. 这个东西其实就是对DAG的dfs树做树链剖分,好像是个很简单的推广。我是傻逼(

  • 相关阅读:
    OBV15 案例2
    OBV_X3
    涨停板割韭菜走势
    谁有stanford ner训练语料
    CUDA从入门到精通
    MatLab 2014a编译jar包时mcc无法使用的问题
    安装office2013时弹出microsoft setup bootstrapper已停止工作,接着就不能安装了
    Lingo 做线性规划
    C# 连接Paradox DB
    Numpy 数组的切片操作
  • 原文地址:https://www.cnblogs.com/tmzbot/p/6736229.html
Copyright © 2011-2022 走看看