线性基

Posted huyufeifei

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线性基相关的知识,希望对你有一定的参考价值。

感觉上跟高斯消元很像但是实际上好写一些。

很重要的思想是贪心。证明不会。

构造:依次考虑,如果没有就插入,有就异或。

取最大值:依次考虑,如果异或之后变大就异或。

合并:log2暴力。

性质:线性基中的元素任意异或不会为0。线性基能异或出所有成功插入进它的元素。

技术图片
 1 struct Base {
 2     LL a[63];
 3     Base() {
 4         memset(a, 0, sizeof(a));
 5     }
 6     inline void insert(LL x) {
 7         for(int i = 62; i >= 0 && x; i--) {
 8             if(((x >> i) & 1) == 0) {
 9                 continue;
10             }
11             if(!a[i]) {
12                 a[i] = x;
13                 break;
14             }
15             x ^= a[i];
16         }
17         return;
18     }
19     inline LL getMax(LL ans) {
20         for(int i = 62; i >= 0; i--) {
21             if((ans ^ a[i]) > ans) {
22                 ans ^= a[i];
23             }
24         }
25         return ans;
26     }
27     inline void merge(const Base &w) {
28         for(int i = 62; i >= 0; i--) {
29             if(w.a[i]) {
30                 insert(w.a[i]);
31             }
32         }
33         return;
34     }
35 };
模板

题目:

bzoj2460 贪心插入。正确性不会。

bzoj2115 构出搜索树,发现所有环都能够取到,于是把所有环的异或和插入线性基。随便找一条路径的权值,扔进线性基中找最大值。

loj#2013 树上倍增/点分治 + 线性基合并。注意点分治不能处理单个点的情况,特判。

 

以上是关于线性基的主要内容,如果未能解决你的问题,请参考以下文章

bzoj 4269 再见Xor 线性基

Codeforces 1100F(线性基+贪心)

线性基 刷题记录

P3857 [TJOI2008]彩灯(线性基)

线性基讲解

线性基入门