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树做树链剖分,好像是个很简单的推广。我是傻逼(

  • 相关阅读:
    weblogic 正常启动页面还是404
    oracle awr 生成
    jre 修改timezone 夏令时冬令时问题
    apache 2.4 配置loadbalance
    plsq 调试存储过程
    Windows怎么命令行修改文件权限
    Windows上面挂载NFS共享
    linux sar命令详解
    Tomcat Connector connectionTimeout含义和验证
    c++STL系列之Set
  • 原文地址:https://www.cnblogs.com/tmzbot/p/6736229.html
Copyright © 2011-2022 走看看