题意简述
给你一个 $n$ 个点的边带权的树,还有 $m$ 个新增的修建计划,以及 $Q$ 个询问。每一个询问的格式是:给定 $s,t,l,r$ ,问你,如果动用 $[l,r]$ 之间的修建计划,从 $s$ 到 $t$ 的路径中,边权异或和最小是多少?
询问之间是独立的,在某一个询问里加入的修建计划,询问完就会拆掉。并且修建计划保证不是树上原来就有的边。
$n,m,q\le 3\times 10^5$,所有的边权(树上和修建计划) $\le 10^9$。对于每个询问,$1\le s,t\le n$,并且$1\le l\le r\le m$。
思路
由 bzoj 2115
的结论得,一张图上从 $s$ 到 $t$ 的路径的异或和,可以由另外一条路径的异或和,异或上几个环的异或和得到。
然后我们珂以先取初始值为 $s$ 到 $t$ 树上路径的异或和,然后在把所有环的异或和放到线性基里,求最小异或和。
本题还限制了只能动用 $[l,r]$ 之间的修建计划。那就按 $r$ 排个序,对于每个位置 $i$ ,记录所有 $r=i$ 的询问。然后在插入线性基的时候,顺便维护上修建计划的编号。对于每个询问,我们只考虑 $[1,r]$ 的修建计划,不用考虑动用 $>r $的修建计划的问题,只要满足修建计划的编号 $\ge l$ 即珂。线性基求最小异或和的时候,顺便维护下即珂。
代码
1 |
|