zoukankan      html  css  js  c++  java
  • 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)$的

  • 相关阅读:
    Wireshark抓包分析TCP 3次握手、4次挥手过程
    Wireshark基本介绍和学习TCP三次握手
    关于TCP窗口大小
    stat
    Disk
    内存对齐
    Openssl asn1parse命令
    checkinstall
    Nginx
    Linux top
  • 原文地址:https://www.cnblogs.com/wmrv587/p/7516018.html
Copyright © 2011-2022 走看看