当前位置: 首页 > news >正文

线性基学习DAY2

今天是第二题学习线性基,让我对线性基的认识更多了,线性基其实就是去处理整个区间异或最值问题的

我们来看一下昨天的一道题

P4570 [BJWC2011] 元素

昨天其实这题我尝试了两次,一种是普通消元去求解,另一种是高斯消元去求解,但是发现高斯消元的方法只有30分,哪里有问题呢?

原来是因为可能会将排好序的元素换到下方,导致出现结果有问题,因此我们用高斯消元去求解的时候,每次交换后,要将有效区间以下的元素再排一次序,然后进行高斯消元就可以完美ak了

#include<bits/stdc++.h>
using namespace std;
#define int long long 
int n;
int len=1;
int bit=60;
struct node{int x;//该矿石的编号 int y; 
}a[1005];bool cmp(node a,node b)
{return a.y>b.y;
}void solve()
{len=1;for(int i=bit;i>=0;i--){for(int j=len;j<=n;j++){if((a[j].x>>i)&1LL){swap(a[len],a[j]);sort(a+len+1,a+n+1,cmp);break;}}if((a[len].x>>i)&1){for(int j=1;j<=n;j++){if(j==len)continue;if((a[j].x>>i)&1LL){a[j].x^=a[len].x;}}len++;}}
}signed main()
{cin>>n;for(int i=1;i<=n;i++){cin>>a[i].x>>a[i].y;}sort(a+1,a+1+n,cmp);solve();int sum = 0;for (int i = 1; i <= len-1; i++) {sum+=a[i].y;}cout << sum;return 0;
}

今日份例题

P4301 [CQOI2013] 新Nim游戏

题意:就是说在正常的nim博弈前面加上一组特殊的操作,我们可以拿多堆石子一次性拿一堆,然后问让自己能赢最少拿的火柴数,那么我们就应该有这种思维,什么情况下我们才能获胜呢?也就是说,无论让后手拿到几堆石子,都无法形成异或为0的形式 ,那么我们就可以用线性基的性质,如果要异或为0,那么就是说明插入的时候出现了0,这样会插入不进去,因此会与线性基里面的内容异或为0,因此我们只需要判断有几堆插不进去即可,将插不进去的元素累加在一起就是最终的答案

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n;
int a[105];
int d[32];
bool cmp(int a,int b)
{return a>b;
}bool solve(int x)
{for(int i=32;i>=0;i--){if((x>>i)&1LL){if(!d[i]){d[i]=x;return true;}else{x^=d[i];}}}return false;
}signed main()
{cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}sort(a+1,a+1+n,cmp);int ans=0;for(int i=1;i<=n;i++){if(!solve(a[i])){ans+=a[i];}}cout<<ans;return 0;
}

P4151 [WC2011] 最大XOR和路径

这题我也是没解出来,看了评论区的大犇才知道该怎么去写出来这个题。

我们可以将整个无向图拆分为一个主链a和一些小环b,我们的的异或最大值,如果只是一个线性的,我们就每次去判断是否比以前更大就行了,我们该如何去处理这个环呢?

 我们发现,如果要走一个环的话,当前的点和下一个点之间的路径就白走了,也就是贡献就是0,因此,我们只需要每次将环加入到线性基当中,然后去求取最大值即可

#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m;
int u,v,w;
struct node{int to;int w;
};
vector<node> e[500005];
int ans[500005];//表示从起点到i这个点所用的最大异或值
int vis[500005];
int base[70];void solve(int x)
{for(int i=63;i>=0;i--){if((x>>i)&1){if(!base[i]){base[i]=x;return ;}x^=base[i];}}return ;
}void dfs(int v,int sum)
{ans[v]=sum;vis[v]=1;for(auto u:e[v]){if(vis[u.to]==0){dfs(u.to,sum^u.w);}else{solve(sum^u.w^ans[u.to]);}}
}signed main()
{cin>>n>>m;for(int i=1;i<=m;i++){cin>>u>>v>>w;e[u].push_back((node){v,w});e[v].push_back((node){u,w});}dfs(1,0);int z=ans[n];for(int i=63;i>=0;i--){if((z^base[i])>z){z=z^base[i];}}cout<<z<<'\n';return 0;
}

总结:线性基就是为了去求解区间中的异或最值问题

希望各位在长大之前能找到属于自己的宝物,并且能够好好珍惜,我也早就已经找到那一份宝物了

相关文章:

  • 【libp2p——NAT】
  • ansible学习之 Facts
  • 平安养老险肇庆中心支公司开展“2024年金融教育宣传月”活动
  • matlab-批处理图像质量变化并形成折线图 (PSNR)
  • HarmonyOs 查看官方文档使用弹窗
  • 【C/C++】错题记录(二)
  • 0代码、自动化,让AI视觉算法赋能千行百业(含源代码)
  • 敢不敢动手?AI绘画+表情包制作,7步搞定超萌表情!
  • Linux Mint急救模式
  • (undone) MIT6.824 Lab1
  • 【华为HCIP实战课程二】OSPF基础介绍和OSPF RID NBMA配置详解
  • zy89、90_C#中字符串及控制字符串的常用函数
  • vue3中动态引入组件并渲染组件
  • DC00023基于jsp+MySQL新生报到管理系统
  • 聊一聊大模型六小虎生存现状!
  • 【附node操作实例】redis简明入门系列—字符串类型
  • Create React App 使用
  • Idea+maven+scala构建包并在spark on yarn 运行
  • JAVA_NIO系列——Channel和Buffer详解
  • JavaSE小实践1:Java爬取斗图网站的所有表情包
  • Java的Interrupt与线程中断
  • java第三方包学习之lombok
  • leetcode98. Validate Binary Search Tree
  • OSS Web直传 (文件图片)
  • Python学习之路16-使用API
  • quasar-framework cnodejs社区
  • VUE es6技巧写法(持续更新中~~~)
  • Vue--数据传输
  • Webpack 4x 之路 ( 四 )
  • 阿里云应用高可用服务公测发布
  • 程序员该如何有效的找工作?
  • 服务器之间,相同帐号,实现免密钥登录
  • 悄悄地说一个bug
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 【干货分享】dos命令大全
  • Python 之网络式编程
  • 你学不懂C语言,是因为不懂编写C程序的7个步骤 ...
  • ​zookeeper集群配置与启动
  • # Redis 入门到精通(八)-- 服务器配置-redis.conf配置与高级数据类型
  • #我与Java虚拟机的故事#连载19:等我技术变强了,我会去看你的 ​
  • $L^p$ 调和函数恒为零
  • $redis-setphp_redis Set命令,php操作Redis Set函数介绍
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (4) openssl rsa/pkey(查看私钥、从私钥中提取公钥、查看公钥)
  • (BAT向)Java岗常问高频面试汇总:MyBatis 微服务 Spring 分布式 MySQL等(1)
  • (C++哈希表01)
  • (ISPRS,2023)深度语义-视觉对齐用于zero-shot遥感图像场景分类
  • (附源码)ssm考生评分系统 毕业设计 071114
  • (附源码)小程序儿童艺术培训机构教育管理小程序 毕业设计 201740
  • (一)ClickHouse 中的 `MaterializedMySQL` 数据库引擎的使用方法、设置、特性和限制。
  • (原創) 如何安裝Linux版本的Quartus II? (SOC) (Quartus II) (Linux) (RedHat) (VirtualBox)
  • .cfg\.dat\.mak(持续补充)
  • .htaccess配置重写url引擎
  • .Net 8.0 新的变化
  • .net2005怎么读string形的xml,不是xml文件。