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)

  代码

转载于:https://www.cnblogs.com/wmrv587/p/8544403.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值