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和。
    这是一个线性基经典运用。
    题目中还有插入/删除,使用上面的方法即可。

  • 相关阅读:
    Beetl模板 [记录]
    wx 小程序开发 [记录]
    高德定位获取省市区[记录]
    vue 学习记录 [记录]
    正则表达+验证 [记录]
    倒计时60s短信 [记录]
    @media [记录]
    JSON + Ajax [记录]
    Webstorm [记录]
    JQ 组合代码 [记录]
  • 原文地址:https://www.cnblogs.com/cszmc2004/p/13471489.html
Copyright © 2011-2022 走看看