正解:线段树分治+线性基

解题报告:

传送门$QwQ$

考虑如果只有操作3,就这题嘛$QwQ$

欧克然后现在考虑加上了操作一操作二

于是就线段树分治鸭

首先线段树叶子节点是询问嘛这个不用说$QwQ$.然后把每条边放到所有它存在的区间上.

然后处理询问的话就$dfs$遍历线段树,删边操作就可以直接按栈序撤销了

最后梳理下这题的大致思路趴$QwQ$.首先以询问为节点建一棵线段树,并把每条边放到所有它会出现的节点处,然后$dfs$整棵线段树计算答案.

具体说下$dfs$的过程趴$QwQ$.

首先显然是要维护一个连通性和两点之间的路径异或值.

考虑现在加入点$(x,y,z)$,表示一条连接$xy$边权为$z$的边

然后如果$xy$在一个并查集内,就多了一个长度为$dis(x,y)\ xor\ y$的环,就给加入线性基中.

否则就把两个并查集合成一个,同时给其中一个并查集中的$dis$全部$xor$上一个值就成

(我好像又没讲清楚,,,就我同时还对每个点维护了它到并查集的根节点的距离,这样求$dis(x,y)$就可以直接$dis_x\ xor\ dis_y$了$QwQ$

(这个值就,合一块儿之后另一个并查集内的点改变的到根节点的距离,也就是$dis_x\ xor\ dis_y\ xor\ z$

然后在撤回操作的时候,直接按栈序撤回就成,就不用可持久化并查集了.

最后还有一个点是,关于撤回操作中线性基怎么删环.

事实上线性基要删除一个元素是挺难的,所以这里的实现是每次复制一个线性基,因为内存占得不大所以是没有影响的(这个和之前寒假的时候考的$shallot$有点儿像(虽然,那道题,我到现在还没落实呜(我落实真的好辣鸡阿我哭了

所以$dfs$的大致流程就,先加边,然后$dfs$,然后撤回,$over$,细节在上面,虽然有点儿杂乱无章但还是比较详细了$w$

然后就做完了?$umm$好像条理不太清楚的亚子,,,算了不懂的直接康代码趴$QAQ$

最新文章

  1. 一行代码引入 ViewPager 无限循环 + 页码显示
  2. [Android]学习笔记之布局
  3. MVVM架构~knockoutjs系列之一些异常的总结(永久更新)
  4. Windows 95 vs. Windows 10
  5. Nginx 下配置SSL证书的方法
  6. Oracle RAC 常用维护工具和命令
  7. 【HDOJ】1022 Train Problem I
  8. SQL中取当前记录的ID----->SCOPE_IDENTITY()
  9. cocos2dx3.4 导出节点树到XML文件
  10. 转载:spring ,struct2 在 web.xml中的配置
  11. BZOJ 2007 NOI2010 海拔高度 最小减产计划
  12. JS中的top是什么?
  13. html的标签分类————可以上传的数据篇
  14. grails服务端口冲突解决办法-【grails】
  15. BZOJ4855 : [Jsoi2016]轻重路径
  16. [Memcached]分布式缓存系统Memcached在Asp.net下的应用
  17. Android基础知识(一)
  18. 开机出错提示 cpu fan speed error detected
  19. h5 打造全屏体验 element.requestFullscreen()
  20. 快捷方式控制台调试each这种方法的时候怎么停

热门文章

  1. CF1238E.Keyboard Purchase 题解 状压/子集划分DP
  2. shell去掉最后一个字符
  3. laravel 中使用tinker注入数据到数据库
  4. 学习java注意的地方
  5. 利用arguments求任意数量数字的和/最大值/最小值
  6. Python--day47--内容回顾
  7. Educational Codeforces Round 7、
  8. win10 uwp 依赖属性
  9. .NET C#与Java比较——Servlet
  10. SVN:符号