$CF938G\ Shortest\ Path\ Queries$ 线段树分治+线性基
正解:线段树分治+线性基
解题报告:
考虑如果只有操作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$
随机推荐
- 使用 Captcha 扩展包 为 Laravel 5 应用生成验证码
http://laravelacademy.org/post/3910.html 1.安装 我们通过 Composer 安装 Captcha 扩展包: composer require mews/ca ...
- Liunx vi/vim 2
移动光标的方法 H 光标移动到这个屏幕的最上方那一行的第一个字符 M 光标移动到这个屏幕的中央那一行的第一个字符 L 光标移动到这个屏幕的最下方那一行的第一个字符 G 移动到这个档案的最后一行(常用 ...
- 21Hash算法以及暴雪Hash
一:哈希表简介 哈希表是一种查找效率极高的数据结构,理想情况下哈希表插入和查找操作的时间复杂度均为O(1),任何一个数据项可以在一个与哈希表长度无关的时间内计算出一个哈希值(key),然后在常量时间内 ...
- HTML标题title滚动
上代码: <script type="text/javascript"> var msg = document.title; msg = "…" + ...
- 如何入门 C++ AMP 教程
本文告诉大家如何写一个 Helloworld 程序. 首先打开 VisualStudio ,大概现在也没有人还在用 VisualStudio 2013 了,所以我就不需要告诉大家需要用哪个版本的 Vi ...
- angularjs 自定义指令弹窗
(function() { 'use strict'; angular.module('frontierApp') .directive('confirmPopup', ['$timeout', Co ...
- 将Eclipse中文注释字体变大方法
今天下了最新的eclipse玩,结果发现注释变得灰常小,差点看瞎哥24K氪金狗眼 于是在网上找了找解决方法,结果都不对 最后自己试出来了... 方法: Window --> Preferenc ...
- MongonDB指令汇总
MongoDB特点使用不存在的对象,就等于你在创建这个对象(库,表,记录) MongoDB服务器/客户端相关 (记得把配置环境变量bin,MongonDB安装后bin在C盘的programfile-- ...
- java 网络编程Socket
TCP: 通过TCP协议传输,得到的是一个顺序的无差错的数据流. 发送方和接收方的成对的两个socket之间必须建立连接, 以便在TCP协议的基础上进行通信,当一个socket(通常都是server ...
- Vue 列表动画实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...