zoukankan      html  css  js  c++  java
  • 线性基删除

    以前学过但是忘记了。
    显然可以线段树分治。这里介绍在线算法。
    如果要删除的数在线性基外,则直接删除即可。
    如果在线性基内。
    没有在线性基内的数,一定是在线性基外有若干个数可以表示它。
    对于每个线性基外的数维护一个集合s,表示线性基外xor可以得到它的数。
    如果线性基外某一个数(y)的集合包含x,则可以直接把这个数删除。
    假若这个集合内的数是(a_1,a_2,...a_n)
    (a_1wedge a_2wedge ...wedge xwedge ...wedge a_n=y)
    (x=a_1wedge ...wedge y)
    这说明(y)可以代替(x)(a_1,a_2,...y)xor起来可以代替(x),把(y)删除即可。
    如果没有,则删除后线性基降秩。
    对线性基内每个数造一个集合P,表示它进来后xor过哪些数。
    找到最小的且P包含x的集合的数,然后把这个数xor线性基内所有P包含x的数即可。这样子可以消除x的影响。
    为什么?原因是因为如果选择其他的,则线性基内的所有数还要重新插入,要计算该数删除的影响。
    例题jzoj5059
    根据题意,如果设一个点的权值为它连接的边的权值的xor和,则答案就是这些点的子集的最大xor和。
    这是一个线性基经典运用。
    题目中还有插入/删除,使用上面的方法即可。

  • 相关阅读:
    团队作业(三)
    第四章学习笔记
    2.3.1测试
    缓冲区溢出漏洞实验
    第三章学习笔记
    团队作业(二)
    第十一章学习笔记
    第7,8章自学笔记
    stat命令实现—mystat
    第五章学习笔记
  • 原文地址:https://www.cnblogs.com/cszmc2004/p/13471489.html
Copyright © 2011-2022 走看看