• hdu6200 mustedge mustedge mustedge (并查集+dfs序树状数组)


    题意

      给定一个n个点m条边无向图(n,m<=1e5)

      支持两个操作

        1.添加一条边

        2.询问点u到点v的所有路径中必经边的条数

      操作数<=1e5

    分析

      第一眼看起来像是要动态维护无向图的边双连通分量,看似无法做

      其实可以这样想,假设我们有一个树,那么这个树上的每一条边都是必经边

      现在假设多加一条非树边(u,v),那么相当于原树上u->v这条路径上的所有边都变成了非必经边

      也就是如果我们认为必经是1,非必经是0,那么所要做的两个操作就是1.将树上路径全部赋为0    2.询问树上路径的和

      这是裸的树链剖分,但可惜的是这题10组数据,卡了$O(nlog^2n)$的树链剖分

      这题就要用神奇的套路解决了

      注意到这里树上路径操作只是将1变成0,所以有效操作最多就n次,树链剖分中有很多没必要的赋值

      我们可以用并查集来解决,记录f[i]表示点i的上一个仍旧是1的点,这样对于修改直接利用并查集在树上跳,这样修改是$O(n)$的

      那么怎么处理询问呢

      我们可以维护每个点到根节点路径上权值和,那么询问的时候加一加减一减就行了,现在考虑如果将一条边u-fa[u]从1改成0,那么相当于以u为根的子树中所有的权值都要减去1

      所以这个我们可以先dfs序,然后相当于“改段求点”,直接树状数组就ok了

      这样时间复杂度就是$O(nlogn)$的

  • 相关阅读:
    jquery的data、attr、expando
    Vue-router导航问题
    函数声明与函数表达式
    Object.defineProperty方法
    移动端Web开发,ios下 input为圆角
    parseInt和map方法使用案例分析
    字符串处理常见函数
    ES6之Promise的基本用法
    浮动相关
    知识点拾遗
  • 原文地址:https://www.cnblogs.com/wmrv587/p/7516018.html
Copyright © 2020-2023  润新知