线性基学习笔记

线性基

preface

需要一点线性空间知识

  1. 线性相关:在向量空间V的一组向量A:a1,a2...am 如果存在不全为零的数 k1,k2,···,km , 使aiki=0则称向量组A是线性相关的,否则线性无关
  2. 线性表出:在向量空间V的一组向量A:a1,a2...am 如果存在一组实数 k1,k2,···,km , 使aiki=b,那么称b能被A线性表出

还有通俗的线性基的定义(其实线性基就是极大线性无关组,就是矩阵的秩)

  1. 线性基能相互异或得到原集合的所有相互异或得到的值。
  2. 线性基是满足性质1的最小的集合
  3. 线性基没有异或和为0的子集。

贪心法&高斯消元

异或线性基

二进制下拆分数x,从高位向低位扫

若x再当前位为1,就判断当前位线性基是否有值,若有就把x的当前位消掉,否则就加入线性基

询问最大值时,直接从大往小扫一遍,若变大就更新

最小值就判断是否能为0,否则就输出线性基中最小值

void add(long long x){
	Fd(i,63,0) if((x>>i)&1){
		if(d[i]) x^=d[i];
		else{ d[i]=x;break; }
	}
}
long long ask(long long x){
	Fd(i,63,0) if((x^d[i])>x) x=x^d[i];
	return x;
}

实数线性基

和异或差不多,就是消掉当前位的操作要用高斯消元

例题

P4151 [WC2011] 最大XOR和路径

求1到n的最大XOR路径

我们考虑把路径拆成若干环和链,假如我们先选择了一个1到n的链,我们可以找一个环拓展,具体来说,就是通过一条链到环,再遍历一遍环,再从链回来,于是发现链走了两次,就等价于只走了一个环

所以就是找到全部环(其实就是返祖边对应的环),放进线性基里,然后随便找个1到n的链询问

什么是对的?

  1. 随便的链如果不优,一定会被某个环更新
  2. 返祖边对应的环,通过一些重集可以搞出全部的环
posted @   zhy_learn  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示