异或线性基练习
Posted uid001
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异或线性基练习相关的知识,希望对你有一定的参考价值。
异或线性基定义:
设$S$为一个集合, $a_1,a_2,...,a_r$为$S$的一个子集, 若满足
$(1)a_1,a_2,...,a_r$线性无关 (在$a_1,a_2,...,a_r$中任选元素的异或和均不为$0$)
$(2)S$中每个元素均可由$a_1,a_2,...,a_r$异或得到
则$a_1,a_2,...,a_r$为$S$的异或线性基
一些性质:
$(1)S$与$S$的异或线性基等价
$(2)S$张成的元素数$=2^r$
线性基的求法:
可以利用线性代数中高斯消元, 但有更简便做法, 一般是采用动态插入维护线性基, 这里直接给出代码
void ins(int x) { REP(i,1,*a) x = min(x, x^a[i]); if (x) a[++*a] = x; }
$*a$统计维数, 最后$a_1,a_2,...a_*a$即为线性基的一个等价向量组
如果求张成空间中最大元素可以由贪心很容易得到
ll query() { ll ans = 0; REP(i,1,*a) ans = max(ans, ans^a[i]); return ans; }
以上是关于异或线性基练习的主要内容,如果未能解决你的问题,请参考以下文章