00:00:00
线性基 笔记
异或空间线性基,和向量空间线性基对于向量空间一样,异或空间线性基内的元素针对一个集合
一、基本操作
1. 插入
定义
当插入一个
首先,
2. 判断是否存在一个数 / 查询异或最大值
同理从高到低位找即可。
3. 查询异或最小值
可以证明,线性基中不存在异或出来为
所以最小值就是线性基里的最小值。
4. 模板代码
点击查看代码
cpp
void insert(int x) {
for (int i = M; i >= 0; i--)
if (x >> i & 1) {
if (!a[i]) {
a[i] = x;
return;
} else
x ^= a[i];
}
}
int query() {
int ret = 0;
for (int i = M; i >= 0; i--)
ret = max(ret, ret ^ a[i]);
return ret;
}二、一些定理
定理 1
证明:由于不生成重复元素,那么就是选或不选问题。
三、刷题总结
类 1:图上路径问题类
(1). P4151 [WC2011] 最大XOR和路径
答案一定是一条
借用线性基的思想,两条
图源洛谷 @jun头吉吉:
