线性基学习笔记

介绍

线性基是向量空间的一组基底。

正如平面向量的基底,空间向量的基底一样,线性空间的基底可以表示线性空间中的任意一个向量。

简单来说,线性基是一个这样的集合:

  • 线性基中的元素互不相同
  • 线性基中没有异或和为0的子集
  • 线性基任意子集的异或和互不相同
  • 线性基中每个元素的最高位互不相同
  • 线性基中的元素相互异或可以得到原元素所有相互异或得到的值

构造

(show you the code.)

inline void insert(ll *A,ll w){
	for(int i=60;i>=0;i--){
		if(!((w>>i))) continue;
		if(!A[i]){A[i]=w;break;}
		w^=A[i];
	}
	return;
}

用途

用于解决和异或有关的相关问题。

异或最大值

SGU-275

Luogu P3812

和图论路径相关的:

Luogu P4151

和树论有关的:

Luogu P3292

异或种类数

统计线性基中的元素个数(cnt),原元素相互异或可以得出的互不相同的数的个数为(2^{cnt})

Luogu P3857

要求所选元素异或和不为0

判断待选的元素是否能插入线性基,也就是看此元素插入线性基时是否被异或成了0。

一般和贪心一起出题。

博弈论相关:

Luogu P4301

简单贪心:

Luogu P4570

异或排名

根据位数判断累加,由于我们可以求最高位为(i)最大的数(w),所以比(w)小的数有(2^{cnt})(cnt)表示在(i)之前有多少位上线性基有值。

结论:所有不同的异或和出现次数都相同。

Luogu P4869

问一个数是否能被线性基中的元素表示出来

一位一位去异或,和插入元素差不多。

看最后是否为0。

ABC223H

未完待续❀

原文地址:https://www.cnblogs.com/xxbbkk/p/15260409.html