Codeforces 938G(cdq分治+可撤销并查集+线性基)

题意:

  有一个无向连通图,支持三个操作:

  1 x y d : 新建一条x和y的无向边,长度为d

  2 x y    :删除x和y之间的无向边

  3 x y    :询问x到y的所有路径中(可以绕环)最短的是多少(路径长度是经过所有边的异或)

  n,m,q<=2e5

分析:

  如果没有加边和删边操作,那么就是个经典的线性基问题

  我们可以先弄出一个树,然后非树边就形成环,把环丢进线性基就可以了

  现在有了加边和删边操作,我们可以考虑每条边的存活时间,对这个时间进行cdq分治,那么就只有加边没有删边了

  然后再离线处理询问即可

  可以用线段树实现更加简单

  具体实现的时候,加边操作即是加了一些边到并查集里面,所以退出时撤销掉就行了

  至于base,直接拿数组存下来,覆盖即可

  时间复杂度O(nlog^2n)

  代码

posted @ 2018-03-11 15:37  Chellyutaha  阅读(550)  评论(0编辑  收藏  举报