线性基学习笔记
线性基
preface
需要一点线性空间知识
- 线性相关:在向量空间V的一组向量 如果存在不全为零的数 , 使则称向量组A是线性相关的,否则线性无关
- 线性表出:在向量空间V的一组向量 如果存在一组实数 , 使,那么称b能被A线性表出
还有通俗的线性基的定义(其实线性基就是极大线性无关组,就是矩阵的秩)
- 线性基能相互异或得到原集合的所有相互异或得到的值。
- 线性基是满足性质1的最小的集合
- 线性基没有异或和为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的链询问
什么是对的?
- 随便的链如果不优,一定会被某个环更新
- 返祖边对应的环,通过一些重集可以搞出全部的环
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!