bzoj4568(合并线性基+倍增)
裸题练习模板
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<vector>
using namespace std;
typedef long long ll;
const int maxn=;
vector<ll>v[maxn][];
int d[maxn],n,Q,fa[maxn][],last[maxn],pre[maxn],other[maxn],t;
void add(int x,int y){++t;pre[t]=last[x];last[x]=t;other[t]=y;}
ll x,q[maxn];
vector<ll> uni(vector<ll> a,vector<ll> b){
vector<ll>ans;
int top=,lena=a.size(),lenb=b.size();
for(int i=;i<lena;++i)q[++top]=a[i];
for(int i=;i<lenb;++i)q[++top]=b[i];
int p=;
for(int j=;j>=;--j){
bool flag=;
for(int i=p+;i<=top;++i)
if((q[i]>>j)&){
swap(q[i],q[++p]);
flag=;break;
}
if(!flag)continue;
for(int i=;i<=top;++i)
if(i!=p){
if((q[i]>>j)&)q[i]^=q[p];
}
}
for(int i=;i<=p;++i)ans.push_back(q[i]);
return ans;
}
void dfs(int x){
for(int i=last[x];i;i=pre[i]){
int v=other[i];
if(v==fa[x][])continue;
d[v]=d[x]+;fa[v][]=x;
dfs(v);
}
}
int lca(int x,int y){
if(d[x]<d[y])swap(x,y);
for(int i=;i>=;--i)
if(d[fa[x][i]]>=d[y])x=fa[x][i];
if(x==y)return x;
for(int i=;i>=;--i)
if(fa[x][i]!=fa[y][i])x=fa[x][i],y=fa[y][i];
return fa[x][];
}
int jump(int x,int y){
for(int i=;i>=;--i){
if((<<i)&y)x=fa[x][i];
}
return x;
}
vector<ll> qs(int x,int y){
int k=log2(d[x]-d[y]+);
return uni(v[x][k],v[jump(x,d[x]-d[y]+-(<<k))][k]);
}
int main(){
cin>>n>>Q;
for(int i=;i<=n;++i){
scanf("%lld",&x);
v[i][].push_back(x);
}
int a,b,tmp;
for(int i=;i<n;++i){
scanf("%d%d",&a,&b);
add(a,b);add(b,a);
}
dfs();
for(int j=;j<=;++j)
for(int i=;i<=n;++i){
fa[i][j]=fa[fa[i][j-]][j-];
v[i][j]=uni(v[i][j-],v[fa[i][j-]][j-]);
}
while(Q--){
scanf("%d%d",&a,&b);
tmp=lca(a,b);
vector<ll>ans=uni(qs(a,tmp),qs(b,tmp));
ll res=,siz=ans.size();
for(int i=;i<siz;++i)
if((res^ans[i])>res)res^=ans[i];
printf("%lld\n",res);
}
return ;
}
bzoj4568(合并线性基+倍增)的更多相关文章
- P3292 [SCOI2016]幸运数字 [线性基+倍增]
线性基+倍增 // by Isaunoya #include <bits/stdc++.h> using namespace std; #define rep(i, x, y) for ( ...
- BZOJ4568: [Scoi2016]幸运数字(线性基 倍增)
题意 题目链接 Sol 线性基是可以合并的 倍增维护一下 然后就做完了?? 喵喵喵? // luogu-judger-enable-o2 #include<bits/stdc++.h> # ...
- BZOJ 4568: [Scoi2016]幸运数字 [线性基 倍增]
4568: [Scoi2016]幸运数字 题意:一颗带点权的树,求树上两点间异或值最大子集的异或值 显然要用线性基 可以用倍增的思想,维护每个点向上\(2^j\)个祖先这些点的线性基,求lca的时候合 ...
- 洛谷P3292 [SCOI2016]幸运数字 线性基+倍增
P3292 [SCOI2016]幸运数字 传送门 题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在 ...
- BZOJ 4568 [Scoi2016]幸运数字 ——线性基 倍增
[题目分析] 考虑异或的最大值,维护线性基就可以了. 但是有多次的询问,树剖或者倍增都可以. 想了想树剖动辄数百行的代码. 算了,我还是写倍增吧. 注:被位运算和大于号的优先级坑了一次,QaQ [代码 ...
- CodeForces - 587E[线段树+线性基+差分] ->(线段树维护区间合并线性基)
题意:给你一个数组,有两种操作,一种区间xor一个值,一个是查询区间xor的结果的种类数 做法一:对于一个给定的区间,我们可以通过求解线性基的方式求出结果的种类数,而现在只不过将其放在线树上维护区间线 ...
- 「洛谷3292」「BZOJ4568」「SCOI2016」幸运数字【倍增LCA+线性基+合并】
[bzoj数据下载地址]不要谢我 先讲一下窝是怎么错的... \(MLE\)是因为数组开小了.. 看到异或和最大,那么就会想到用线性基. 如果不会线性基的可以参考一下我的学习笔记:「线性基」学习笔记a ...
- 【BZOJ-4568】幸运数字 树链剖分 + 线性基合并
4568: [Scoi2016]幸运数字 Time Limit: 60 Sec Memory Limit: 256 MBSubmit: 238 Solved: 113[Submit][Status ...
- 【bzoj4568】[Scoi2016]幸运数字 树上倍增+高斯消元动态维护线性基
题目描述 A 国共有 n 座城市,这些城市由 n-1 条道路相连,使得任意两座城市可以互达,且路径唯一.每座城市都有一个幸运数字,以纪念碑的形式矗立在这座城市的正中心,作为城市的象征.一些旅行者希望游 ...
随机推荐
- 解决mysql连接linux上mysql服务器的问题
在远程连接mysql的时候,连接不上,出现如下报错:Lost connection to MySQL server at 'waiting for initial communication pack ...
- Jmeter固定定时器(Constant Timer)
如上图,Constant Timer是jmeter固定定时器元件 一般用来设置延时的,放在某个请求下,表示Constant Timer配置的指定时间后,再开始发起这个请求操作(单位:毫秒) 根据Con ...
- step_by_step_记录一个javascript字符串处理问题
记录一个javascript字符串处理的问题 这一天下班,技术QQ群里的大神提出了一个问题,带着问题去思考. ? '---9890.999008-555555-55555555----' 对于这样的字 ...
- splice的用法
splice向数组中删除/添加新元素,然后返回新数组 arrObject.splice(index,howmany,item1,...,itemx); 参数 描述 index 必需.整数,规定添加/删 ...
- as3.0 比较两个数组
var arr1:Array=[1,2,3,4] var arr2:Array=[1,2,4,3] trace(arr1.join(",") == arr2.join(" ...
- 100-days: twenty-eight
Title: Lawrence Ferlinghetti's(劳伦斯·费林盖蒂) enduring San Francisco(旧金山) 劳伦斯·费林盖蒂心中的旧金山,历久弥新 费林盖蒂:美国垮掉的一 ...
- json对象和字符串的相互转换
JSON.stringify(obj) 将JSON对象转为字符串. JSON.parse(string) 将字符串转为JSON对象格式. 后台给你数据的时候,有时候会给你字符串 ...
- php 微信自定义分享接口
<?php class JSSDK { private $appId; private $appSecret; public function __construct($appId, $appS ...
- vs code 配置 php xdebug
1.安装扩展 php debug 2.下载xdebug插件 做个页面输出phpinfo(),复制到这个页面 https://xdebug.org/wizard.php 提交后会告诉你机子要下载哪个版本 ...
- shp2pgsql向postgresql导入shape数据
1. 准备好Shape文件(不仅仅是.shp文悠扬,还要有其他相关数据文件,包括.shx..prj..dbf文件). 2. 使用命令将Shape数据转换为*.sql文件 shp2pgsql -s 38 ...